Persona 5 Royal

Persona 5 Royal

, ,

A short post about one of the best games I’ve played to date.

⚠️ Warning, this post may contain story spoilers, though I’ve tried to leave things as vauge as possible.

Out of all the games I’ve played, Nothing comes close the experience I felt with my first entry into the Persona series. I randomly stumbled upon this game with RTGame on YouTube playing it. At the time I had no idea what it was about but it looked good. After watching one or two battles and a bit of the story I immediately stopped watching and bought the game to play it myself.

What proceeded was me playing the game for about two months, with it taking up most of my free time over the Christmas break from work. Now when I’m into a game I play it, not madly and to the detriment of my health. I don’t stay up late or anything. But I was certainly excited and playing this as often as I got time and not many games have managed to do that to me. That should say something to how much fun I had playing this.

If your not sure what the persona games are like, they are essentially a life-sim/turn based battler style of game. with you going about you day to day life with friends, making the most of your time to up your stats and strengthen your bonds. While the battling takes place in a alternative world of sorts connected to the real world in someway with deadlines to keep you on track or face a game over. Most of the games take place over a school year starting in April as they do in Japan and ending around March the following year in the story. This both makes the game long and makes you feel like your actually living through the time.

Each of the “main” persona games are themed differently. I say “main” as most consider the series to really find its mark with Persona 3 onwards, while there is love for the earlier titles, Persona 3 is where it really went global and is the formula the games have followed since with the exception of the spin offs like the dancing games and in P5’s case strikers. In Persona 5’s case its themed around injustice and correcting wrongs in society by making people have a change of heart, with red as its main theme colour.

The story and characters in the game are really well done. Having now played parts of P3 & the whole of P4G I can say that P4’s story is slightly better in terms of the friendship group feeling like friends. But P5R still does a good job. The opening palace is a glorified tutorial, but in itself is a great arch based around a bad teacher at the school you attend. As a transfer student with a criminal record for doing nothing bad you already have a bad rep. But you soon meet your first party members and a talking cat. The cat you’ll learn to hate, mostly due to said cat forcing you to stay home when you want to go out later in the game. The first part of the game also does a great job introducing all the mechanics of the battle system to a new player. I never really felt overwhelmed, rare for a game this complex. After the first palace you find more and each one revolves around a new party member or event in the story. Without going into detail or spoiling it, they are all well themed though some play better than others.

At this point I can’t help but mention the intro’s and stellar soundtrack. Its not often that I play the same music on and on, but I’ve been listening to this soundtrack for well over a year now and it doesn’t get old. The opening the Persona 5 Royal is really lively and energic, while some prefer the original Persona 5 intro over it, I personally prefer royal’s take. Though the original’s theme is a really banger in its own right. The royal intro below if you’ve never seen it before:

That’s just the intro, the battle themes in Persona 5 Royal are also outstanding. Pretty much all of them are great as well as the day to day soundtrack you hear while doing more tame things. A few of my favourites below:

  • Rivers in the Desert
  • Life Will Change
  • Phantom
  • Tokyo Daylight
  • Last Surprise
  • Take Over
  • I Believe

The ending to this game is by far one was the best finale I’ve played through. I say this a lot about this game, I mean it. It really feels like the final battle. Now I’m talking about the Royal ending specifically here. The original’s ending is also really good and on equal scale to the royal ending, but royal certainly completes the story with a really deep final semester and final battle. The song “I Believe” really hits when you get to it, like really really hits. As if this is the final battle with really high stakes. The ending hits home even more by the tragic fact that the English voice actor for the antagonist in this part passed away not long after royal came out. Making his point feel even more prevalent. Even if it is just a game at the end of the day. I won’t ever forget how that moment made me feel. You’ll get why when you play it.

I finished my first playthrough with roughly 119 hours played. Yea you read that right. Its a long game, but its certainly worth it. You can get through it quicker than that if your trying, but I never really got bored of it. At the end I way sitting there watching the credits all the way through, as I always do where I can as I know how much it takes to make a game being a game developer myself. The credits song “Our Light” really setting the tone for my next thought, now what……. The post game depression hit as that was it for Persona 5 Royal. While it’ll never be the same playing it again, I do plan to at some point with new game plus.

One final thing, this game both got me into the persona franchise as a whole, having played the earielr Persona 4 Golden and Persona 5 Strikers at this point. I did start Persona 3 Portable, but the later true rumours of a remake of Persona 3 made me want to hold off. With Persona 3 Reload around the corner I’m super excited to play it when it comes out. The game also got me interested in the language. Now I’ve been historically terrible at forgein languages at school, but I felt like giving Japanese a go. So far its going okay, but I’m taking it slow with the aim to be able to speak and read a bit of the language and maybe visit the county some day if I ever get the courage to go.

Refactors Galore

Refactors Galore

Its been a few months since my last update on the project. So here’s an update on the progress so far.

The Refactoring

Moves

Before this refactor I had the 1 move implemented in a way. That being the persona attack skill use ability. When attempting to implement the guard move for a party member I found that the old implementation was far too limiting. So I refactored it. The new setup uses an interface for the logic shared between each move and a class implementation of every move the user can have. I managed to refactor the move I had before in to this new setup and implement a guard move without any issues which was good. Since then I’ve started implementing other moves such as the support skills.

using CarterGames.Common.Events;

namespace Gameplay.Actions
{
    /// <summary>
    /// Implement to make a new move in the game for a party member or enemy to use.
    /// </summary>
    public interface IGameMove
    {
        /* ————————————————————————————————————————————————————————————————————————————
        |   Properties
        ———————————————————————————————————————————————————————————————————————————— */
        
        /// <summary>
        /// The type of action the move is.
        /// </summary>
        GameMoveType ActionType { get; }
        
        
        /// <summary>
        /// Raises when the move is completed.
        /// </summary>
        Evt MoveCompleted { get; set; }
        
        
        /// <summary>
        /// Any ctx for the move to use.
        /// </summary>
        object ActionCtxData { get; set; }
        
        /* ————————————————————————————————————————————————————————————————————————————
        |   Methods
        ———————————————————————————————————————————————————————————————————————————— */
        
        /// <summary>
        /// Performs the move when called.
        /// </summary>
        void PerformMove();
        
        
        /// <summary>
        /// Resets the move when called.
        /// </summary>
        void ResetMove();
    }
}

Slot Navigation

While its still not fully complete, I’ve also refactored the slot navigation system to be more flexible that it was. Beforehand it was a bit of a mess with the whole wildcard solution, honestly it was a bit over-engineered. With this refactor the system is much better, but while writing this post I noticed some bugs with the wild option, so there is still some work to do there.I was also able to use this system in the persona skill select display as well. Before I as using a different setup for that which felt a bit dumb.

Minor Bits

Some extra refactors, not full systems but some improvement include:

  • Target Manager > Sorted the resetting when selecting skills, as skills like support skills can target the party instead of enemies.
  • Turn Manager > Updated the turn manager to track complete turns and the ability to loop around to the start again.

Party Buffs

In Persona you can buff or debuff combatants in Critical chance, Attack/Defense/Agiligy & reflection walls to repel single attacks. I wrote a system to support this on combatants in the last month. The system took a bit of time to implement properly but I was able to get it working eventually. I also sorted the UI for the setup which appears over the combatant when they have any buff or debuff applied. These buffs are also set to only last a number of turns and will expire on the turn when there are no uses left.

And yea, there are some UI bugs and missing art on the character stats now…. Lots of little bits to fix 🙂

Project Cleanup

Behind the scenes I’ve also been doing a lot of cleaning up. There were a lot of prefabs and old art in the project that wasn’t being used anymore. I managed to clear up all the old prefabs and improve the structure so there is a prefab for the model as is for menu’s etc. While the other is for the actual persona model for the game scene when summoning the persona.

I also renamed all the assets to match a naming convention I use a work which is mostly for the art side but with some extra conventions for prefabs and scenes. The convention below if you’re interested:

That’s about all the big news I have for now. I’ll still be working away at this project when I get the time. But I am taking at-least 1 day off a week to just chill and do nothing game dev related. With an extra day off for the rest of the year more or less I’ll be taking that fully. I’ve been slowly getting through Person 4 Golden on those days so far, been good fun. Held off on Persona 3 Portable once Persona 3 Reload was annouced officially as that’ll be much more engaging to play when it comes out next year. Its looking awesome so far, really looking forward to playing it on release day, may even take a day off to play it xD

Komi Can’t Communicate

Komi Can’t Communicate

, , ,

Recently I’ve been trying to find some Anime’s/Manga’s to get into. Mostly to expose myself to more Japanese language to help me understand it, but also for entertainment. This is one of the first ones I came across and I’m glad I found it.

⚠️ Warning, this post contains some early story spoilers.

A picture of the main character komi (right) holding up a note written in japanese.

Komi Can’t Communicate/古見さんは、コミュ症です is an ongoing manga series. It tells the story of a high school girl named Shoko Komi who has a really hard time communicating with people as she suffers from extreme social anxiety. Something which I have and still do suffer from, though admittedly not as bad as Komi does. When I picked this up I will admit that I instantly read through the entire manga as is it stands to date in about a week if not faster. As of writing there are 24 volumes, 25 isn’t out for another few weeks yet, with 26 & 27 coming later this year. I will be getting them as and when 🤩.

Now I don’t read often, mostly as I find it quite boring when the content isn’t something I’m super interested in. But this I would actually voluntarily read. Similar to Lonely Castle in the Mirror, a book I read recently that I have a post in the works for as well. I read that in a similar vain and was excited to finish it. I did also watch the anime adaptation, in Japanese with subtitles and it does a really good job of bringing the manga to life. Watching it is a good alternative if your not into the manga, but note it is very far behind the current manga’s being released. The anime currently has 2 seasons as of writing which covers volumes 1 – 9 and the start of volume 10.

An intense moment with a boy (left) being tapped on the sholder by Komi (right) with a shock moment.

The story mainly covers Komi’s goal of making 100 friends, something which starts with the help of her first friend Hitohito Tadano. Tadano notices Komi struggling to say anything and being incredibly nervous, shy & anxious about everything that she says/does. He’s the first to actually notice this and provide a compromise with writing on the blackboard at the back of the class. Komi had managed it earlier in the class. Komi is able to communicate by writing things down and explains the situation and how she feels. She is about the leave after explaining it all when Tadano starts writing a question the blackboard. They then share their first conversation on the blackboard. Its a really sweet moment between the two and starts off one hell of a friendship.

A screenshot of Komi (left) & Tadano (right) writing on a blackboard in japanese.

What follows is just an amazingly well made collection of moments through the year with Komi constantly been misunderstood as someone totally different to who she is on multiple occasions. She’s also the most popular member of the class, being very attractive and all. She’s even made as class “god”. A role the class made just for her as she couldn’t really handle being the class rep. Tadano ended up being the rep. I really love the visuals through the manga, mostly the way Komi is represented. I loved the notepad conversations & the way Komi is drawn with just the eyes, its kind of cute 😻.

A screenshot of Tadano (left) looking at Komi (right) who has just jumped in the air in joy at making her 2nd friend.

As I eluded too earlier, I really connected with this anime/manga. Komi’s struggles to talk and how she reacts in social situations is very similar to how I’d react in some cases. I’ve certainly come out of my shell over the year and am far better at talking to people than I was a few years back, but I still have some of these exact anxieties. The manga also brings up talking fast as being a communication disorder which feels right given how I naturally speak really fast. To the point where I have to repeat myself wayyyyy to much. To the point were its annoying to me.

But it also nicely conveys exactly how I feel after conversations with people. I’m immediately thinking did I say something wrong? was that appropriate? I should’ve had said that! etc. As well as the nerves people like me can suffer from, from even the most mundane things, like making a phone call, arranging to meet people or even just going somewhere totally new. It piles up and the manga nicely shows that this can keep you up at night. I know it does for me sometimes, I often loose sleep from overthinking like this about pretty much anything. Its nice to see it represented. for a change.

A screenshot with Komi & Tadano (right) in shock at what is being shown to them on the paper being help by another classmate (left).

Overall I really recommend people give this a watch/read. For me its something I’m looking forward to reading now, can’t wait for the next volume in a few weeks, its really kicking off on a long running story beat now and I’m loving it.

* All media in this post is from the Komi Can’t Communicate Anime series on Netflix. No copyright infringment is interned in their use & belongs to its respective copyright holder(s).

Lonely Castle in the Mirror

Lonely Castle in the Mirror

, , ,

I randomly came about the trailer for the anime film adaption of the book of the same name. Once I saw the trailer, I actually got the book. Mostly due to the film not being out at the time.

⚠️ Warning, this post contains story spoilers.

The trailer I watched before buying the book.

So, Lonely Castle in the Mirror tells the story of a group of school age children who are all summoned to a castle through mirrors in their rooms. The mirrors open up during the day from 9-5 allowing all of them to access the castle as a safe space. There is a mystery around the castle, it has no running water or utilities other than electricity and it will grant one wish to the person who finds the key hidden in the castle. There are some catches though. The castle will close to everyone when a wish is granted, they have a year to find it or it will close regardless and when the wish is granted, all their memories of the castle will be lost. Their memories will remain if no-one claims the wish. Also there are wolves that’ll eat anyone who breaks the rules.

What made this story stand out even more was the fact the 7 kids in the castle were all suffering from a mixture of abuse, bullying & loss. For me the bullied students hit home the most, being bullied a lot myself back in school, I went through a lot of the similar experiences.

The main character Kokoro, which means heart in Japanese, is suffering from mass bullying trauma & can barely leave the house. She hasn’t been to school in a while and it is taking its toll. Essentially she’s been bullied for having a short affair/crush on a guy at school. The popular girl group is mocking her & being real nasty to her and her emotions. It all becomes too much for Kokoro to handle and she isolates herself, not going to school despite her mother protests. One scene that was very familiar to me, as I think I had a moment just like this when I was younger, was when her bullies came to her home and started to banging on her door. Trying to get her to come out and face them. Kokoro does exactly what I’d do, lock all the door, close all the curtains and hide. I’m glad this scene is in the anime as it really hits hard how badly hurt Kokoro is mentally by their presence and how vulnerable she is from it. I won’t spoil the other teens troubles, but you do learn them throughout the story.

I do have to take a moment to mention the soundtrack. Its another really good one. I do love my music, so when a film/game makes a good soundtrack, I notice. Below is the main theme & soundtrack for the film version if you want to have a listen:

People who know me know that I don’t read often, not that I can’t read, but personally I find it really hard to get into a book. However this was an acception. I ended up reading the book in like two weeks which is un-heard. It started with just evening reads, about 30 mins each night right before going to sleep in bed. But I ended up finishing the book during the day volunterrially as I was into it so much. Having seen the film as well, I can say for the sure the book is worth a read. They miss a lot of the bonding moments between the characters to get all the story in the runtime. Which is something you really notice reading the book, its also an easy read. Even though its translated from Japanese and has a few odd translation moments.

So yea, this is totally worth a read. Its not a happy story for most of its runtime. But I thoroughly recommend it.

Early Combat Setup & Party Members

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.

View Display & Fixes

View Display & Fixes

Another month has passed since the last update, and I’ve been mostly focusing on the UI displays and fixing a few bugs as well as some general organisation. I haven’t been able to dedicate much time to the project for the last few weeks, as I had the Save Manager to finish up for Carter Games by the end of April.

Preview

Below is a short video of the current progress made on the project as of writing:

View persona UI

The UI hasn’t changed much on the front-end, but behind the scenes a lot had gone on. I’ve spent the time to improve the UI Polygon setup that I’m using for the odd shapes in the UI. The new setup lets me drag points in the editor space and the graphic is then drawn using those points. I’ve also made it so this updates in edit mode so it’s easier to visualize. The upside being it’s easier to edit and less buggy. But I still need to do a little bit more to it. As it currently doesn’t scale with the bounds (width/height) of the graphic.

A screenshot of the unity editor with a element of the persona UI selected showing 4 points highlighted as gizmo's

With this new UI polygon setup I remade the UI for the skill strengths & weaknesses. Mainly to have the extra length for the text. I couldn’t quite match the text perfectly with Persona 5’s text as the font has a few layers to it. That and I couldn’t find a font close enough to match it, so I went with the readable option. This turned out okay and I refactored the display code to toggle the sections correctly when needed.

A screenshot of the view persona display with a skill highlighted.

The next new part was the navigation of the UI. In Persona 5 you can inspect each skill and move around the slots for each persona. This wasn’t the easiest system to code despite it being simple in theory. I ended up with a data structure that split the slots in the columns with an option for wildcard slots that could be accessed from specific slots. I reused the old selection UI from the skills select screen and refactored it to allow for 4-directional blue backgrounds. This was done so as in the game you would see this highlight in the direction you were navigating in.

With this I also implemented the inspect display which I had already laid out to show the skill in more detail. This display updates as you move around the skills and hides is no skill is currently being hovered over. Some of the more general fixes such as toggling user input listeners at the right times were also adjusted. As some of them were listening on start instead of when the screen was opened.

Another notable change is the model preview. While it is still early days, I was able to get the model to spawn in and rotate with user input. The model is stored in a new model system that replaces the old one I had from the 1st day of working on the project. The main upside of the new setup is that I can easily get & re-use models without spawning them all in on start.

The final main change is the ability to switch personas. Using the newly released Save manager 2.x I was able to make a save object for the held persona’s the player has. Currently this is the container class but down the line it will be the raw data for each persona. There is still a lot to do with this system as is, but the ability to switch between all held and select a different persona is now possible which is the key thing.

General organisation

The only other progress of note is a major clean-up of old code. While a lot of the code base is still scrappy and a bit messy, I have spent the time to remove scripts that I want to re-do or are for systems I’ve yet to actually focus on. Structurally the code is split into categories based on what it is about. So, data structures or scriptable objects are in a “Data” folder. While general systems, gameplay specific systems & UI all have their own folders. Inside these folders I have the code split by mechanic. Namespaces wise they all now use the base folder which does name more namespaces, but a more structured setup which I like, for now.

Closing thoughts

Given this has only been a small amount of progress, I’m still happy with it so far. I’m hoping in the coming months to be able to get into some of the gameplay. Implementing the enemies, moves & actual combat. So hopefully more exciting stuff to come! I’d expect the next update in about a months’ time.

Persona UI, Its A Lot Of Work

Persona UI, Its A Lot Of Work

So it’s been about a month and I felt it was about time I updated you’ll on the progress so far. I’m still working on the UI setups at the moment as they are required for the rest of the project to really function. Have been hoping between this project and another on and off all month. So I’ve only actually worked on this for about 10 or so days this month but the progress is worth showing.

Menu Management

With the amount of UI there is to do I needed to make a menu system that would let me switch between different menus with ease. Before I had a manager class that did this on context, but that was getting really messy really quickly. Instead of continuing with the messy setup I decided to refactoring it into something more useable.

The new setup is entirely static and is called in the displays logic for the active menu. The active menu then controls what buttons open what displays and runs the logic to open the new one and close the current if needed. Using an interface to keep it simple. So far this solution is proving to work quite well. Though I imagine I will, have to come back to it at some point and make further adjustments. An example of the new menu controller API in use to close one display & open another:

// API - uses type to open/close menus, with each being registered on the scene opening. 
// MenuController.OpenMenuCloseThis<TOpenMenuType, TCloseMenuType>();
// Below would switch from the skill select UI on the active persona to the detailed persona view display. 
MenuController.OpenMenuCloseThis<ViewPersonaDisplayController, SelectPersonaSkillDisplay>();

Persona Inspect

This is by far the most complex display in the entire project. But so far it’s not going too badly. I’ve managed to get then reveal mostly working and sorted a setup to show the active persona’s data. But there is still a long way to go. One of the challenges of this UI is the fact that it changes each time it’s opened or modified. With boxes randomly changing sizes etc. I have a feeling I’m going to need to work more on the UI polygon script to make it more reliable for all the use cases that are gonna crop up in the future.

P5R

My Version So Far

Some other bits include a popup description display that appears when inspecting the persona skills. I have setup a mockup for this display on the UI which works, but it needs to actually populate with data and appear still which it currently doesn’t. The other main progress is the stat level bars, these are a tad annoying as the actual “fill” is not set the actual value due to the background needing to take up more space than the fill. Currently I have the background taking the actual space while the fill uses a reduced size. But I still want to see if I can get it to update without needing such a workaround. There still a lot to-do on this display but I’m hoping to get it functionally working by the next update.

Data

In my last post I went over some of the data stuff I was working on with Google sheets, this is still an ongoing task with instant kill, healing and some passive skills still to work out and implementation for. Its tricky as a lot of these skills are very specific and working out a generic structure to store the data is proving tricky. But I am hoping to have the data done by the next update or two as it will be needed before I get fully into the gameplay and move implementation. I did fix a few issues here where data wasn’t updating object in the project, but I did some refactoring here and there to make the implementation on the dev side a bit easier. Most notable was the battle stats, so “Str, Ma, En, Ag, Lu”. The main change was to change the data from a struct to a class and to store all the data in a custom SerializableDictionary instead of individual values for ease of access. With getter/setter methods to access specific values by stat type. The code now looking like this:

/// <summary>
/// A container class to hold a persona's battle stats.
/// </summary>
[Serializable]
public class BattleStats
{
    /* ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
    |   Fields
    ───────────────────────────────────────────────────────────────────────────────────────────────────────────── */
    
    [SerializeField] private SerializableDictionary<PersonaBattleStat, int> stats;
    
    /* ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
    |   Constructors
    ───────────────────────────────────────────────────────────────────────────────────────────────────────────── */

    /// <summary>
    /// Makes a blank battle stats class.
    /// </summary>
    public BattleStats() { }


    /// <summary>
    /// Makes a new battle stats data with the dictionary entered.
    /// </summary>
    /// <param name="data">The data to set.</param>
    public BattleStats(SerializableDictionary<PersonaBattleStat, int> data)
    {
        stats = data;
    }
        
    /* ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
    |   Methods
    ───────────────────────────────────────────────────────────────────────────────────────────────────────────── */

    /// <summary>
    /// Gets the stat of the type entered.
    /// </summary>
    /// <param name="statType">The stat to get.</param>
    /// <returns>The stat value.</returns>
    public int GetStat(PersonaBattleStat statType)
    {
        if (stats.ContainsKey(statType))
        {
            return stats[statType];
        }
        
        return -1;
    }


    /// <summary>
    /// Sets the stat to the entered value.
    /// </summary>
    /// <param name="statType">The stat to edit.</param>
    /// <param name="value">The value to set to.</param>
    public void SetStat(PersonaBattleStat statType, int value)
    {
        if (!stats.ContainsKey(statType)) return;
        stats[statType] = value;
    }
}

Misc

In the last post I also covered affinities and their display. I mentioned i wasn’t going to do the two versions. Well I’ve changed my mind on that and now plan to implement the extended boxes in the future. The display just looks really off without the background behind the text. So expect an update on that soon. Otherwise progress is good and I’m pretty happy with how the project is going so far. Even played a little P5R to get some reference material and had to stop myself playing xD

That’s about it for this update, see you all in the next one.

So Much Data

So Much Data

Data Handling

After the first day I was spending time working on the data structure for all the data needed for persona’s which is a lot. The skills stuff I did on day 1 is great, but when thinking about it further I knew I’d need a way to generate a lot of skills and items without needing to do it all manually. As that would just take far too long and I would hate it all by the time I had created each skill by hand. This meant I needed to looking to ways of automating the data creation with some tool. For this I looked to see if there was any way to make a google sheet readable in Unity. Thankfully there was a nice short tutorial on downloading data to a csv format in Unity. I managed to make a system based on that, that would download a google sheet tab to a .csv file that I could then read and convert into the sciprtable objects as needed.

The code is nothing special here and is rather rigid as I made it purely to make scriptable objects and not for general game data use. Though down the line I may looking to make a system like that. But the good thing is that it works and makes handling skills & later the custom personas considerably easier.


Affinites Display UI

Other than that I did a bit more UI work and setup a display for the persona skill affinites. These being the skills they are weak or strong to etc. The display in persona 5 is fairly dynamic with two states for this, one for no text but unkown affinities and another for when there is an affinity. But, due to a lack of good screenshots to mock it up with and the hassle of mathcing it for each icon I’ve decided that for my version to just use the one version and just update the text.

The good news is the unknown state that I’m matching from persona 5 look spretty accurate and cool. See the left for how it looks currently. Note that there is a white background behind it in the final UI setup. I haven’t worked on any of the logic for hooking this up yet, but the data it will use will make it easy to just update the affinity text if it is revealed.


Organisation & Cleanup

The final progress for the day was a bit more clean up with some commenting & script organisation. I improved the polygon ui mover script to auto start/stop and to only run when active and started a better structure where mechanics are grouped together instead of all the ui in one parent folder and all of the data in another as it makes it harder to find some bits of the codebase as it grows in size.


Whats Next?

Mostly more data xD, yea I’ve yet to get the healing skills in as of writing as well as about half of the passive ones. This is due to the varying data that I’ll need to store. There is a chance that I may have to hard code some skills in with no data just due to how specific they are, but I’ll keep trying to make a good structure before going down that way. I also plan to get some early setup for the turn management for a 1 v 1 to start with and then a x v 1 as I plan to have a full party of 4 for the player to use, matching the source game. It’ll probably be a few weeks before the next update as I do have to work on another project at the same time as this and that one has a more rigid deadline to hit.


Project Start, Persona Summoning & UI Tests

Project Start, Persona Summoning & UI Tests

A personal project where I replicate the Persona 5 Royal Turn-Based Combat system as best I can for fun.

I was able to get a full day more of less to kick the project off with a bang. For the majority of the day I was focused on implementing some of the bits I wasn’t sure would work to prove the concept to myself before committing to it fully. I’m glad to say its looking good so we’re all go. To the left is a little video of the setup I made today. However I will be reworking all of this as I rough coded this together and it is a mess.

Whats setup:

  • Basic player & animations
  • Players stats + UI
  • Player persona
  • Persona skill select UI
  • Target select UI

I spent the tail end of the day doing some clean up of the code in preperation for the larger project. Today this was the persona skills. I knew each skill would be more of less the same in structure so I made a base class with the meta data and then specific inheritors for each type like attack & support etc. In doing this I made a custom inspector setup to make it easier to make new skills. A preview of this can be seen to the side.

The custom editor logic handles things such as the icon & name of each skill as well as elements such as the cost of the skill, as some skills use a percentage of the players health while others use a pre-defined amount. For the icons I’m just using some placeholder art I got from FlatIcon for now but I will likely change these down the line. Below are the icons I currently have for each ability:

I’ve already setup a system where you can access each of these icons in code in a static class by the type they represent. Following a similar setup for other data bits down the line should make working with such a large data set more steamlined, but we’ll see how that goes when we get to it.


Your Name

Recently, I started learning Japanese for a bit of fun. I don’t expect to be fluent or anything ever, but knowing a few words or sentences and recognising the symbols would be nice. Learning it is just another part of my daily routine now. Due to this I was interested in watching a few movies in Japanese and found this one from a random anime aesthetics twitter accounts, sharing screenshots from anime’s and a screenshot from the promotional material for this movie drew my eye.

I had no idea what I was getting into with this one but I was pleasantly surprised with what I found. From here on out expect spoilers as I go through the story and my thoughts as I watched it for the first time.

SPOILER WARNING

If you don’t want spoilers for this film, please stop reading here as I’m about to summarise the film and talk about my thoughts as I do.

The Story

The Introduction

The movie begins with a cold open to a comet falling from the sky followed by a little dialogue and a kicker kind of tv style intro for the movie. The dialogue refers to the link between the two main characters as well as the spectacle of the comet in the sky. Referring to it as “Nothing more, nothing less, than a beautiful view”. The music & visuals are absolutely stunning and it nicely introduces you to the locations, events & characters your about to see for the duration of the movie.

The Premise

So your name follows the story of two high schoolers, Taki & Mitsuha who are connected through a ribbon of fate. Which in itself is a mystery. The movie starts off slow, introducing the two characters & their lives. Taki lives in the city with his father & works part time as a waiter in the evenings. He also has a crush on a colleague at said job. While Mitsuha lives in the countryside with her little sister, grandmother & father and dreams of living in the big city, she also takes part in some local traditions of the town. Nothing freaky so far. The story follows their relationship through their unique connection.

The First Twist

Right away we see the first major twist, the body swapping. They first think they are dreaming only later discovering that it is not. Starting with Taki in Mitsuha’s body for a little bit before seeing Mitsuha’s reaction to hearing what happen while she was not in control of her body the day before. A major part of the swapping is the person possessed has no memory of the events that took place while they were possessed. Seeing just a small bit of the possessed day followed by a full introduction of Mitsuha, her friends & life. While also learning of what happened the day before from the recounts of her peers makes for an opening that I really enjoyed. It was different to anything else I had seen already and made want to keep watching. I was watching this movie on my second monitor, trying to get some other work done on the main, but at this point I was hooked at this point and gave up on getting anything done that evening.

We then just to Taki with Mitsuha in control and see what happened, instead of seeing Taki’s life with Taki finding out what happened right away we instead see what Mitsuha got up-to while in Taki’s body. Being someone who wanted to live in the city it is a dream come true for Mitsuha, with cafe’s and all. Everyone around Taki can tell he’s acting strange as Mitsuha has to figure out what Taki’s life is and all. Probably one of the best interactions is when Mitsuha in Taki’s body repairs a tear in a skirt of a colleague, the lady Tai as a bit of a crush for, and she notes the more feminine side to him, which is obviously Mitsuha.

We then see Taki finding out what happened the day before and his reaction, being is pretty accurate with shock and scepticism. As well as getting some funny reactions from his peers, especially as all the guys at his work want to know what happened between him and his crush while Mitsuha was in his body. With Taki in misbelief that it even happened.

We then cut to Mitsuha who wakes up the a whole host of questions written on her, “Mitsuha? Who are you? What are you?” and her sister brings up what Taki first did when in her body, which see saw. This is followed by a short summary of what Taki got up to from her friends telling her throughout the day. Such as making a scene in class by knocking down a desk in protest of what her peers are saying about her. She is naturally shocked, just like Taki was. They then both realise they are swapping bodies, followed by another banger of a tune and a montage/summary of what the swapping is like and how they are both handling it. Which they do, in a like of love/hate relationship as they keep telling each other the do/don’ts in their bodies and personal lives. This whole montage has some funny moments in it as well.

The movie then shifts in tone to a more calming setting, again with some stunning visuals & music. We get to see a bit of the story behind Mitsuha’s town as well as the Taki finding out Mitsuha set him up with his crush for a date which caught him off guard. At the end of the day Taki tried to call Mitsuha, who left her number on his phone. At this point the next twist starts to hit. You’d think calling each other would have been the first thing to do? I did somewhat and it felt like a bit of a plot whole, but it didn’t bother me too much as the next bit explained why that wouldn’t work.

The Second Twist

The second act brings the comet that we saw at the start of the film into the movie. We see Mitsuha over the cliff at the festival, the shot from the title card at the start of the movie and and the comet split into two with a hard cut as we see the reflection of the split in her eyes with an audio cue to refer to the comet hitting the ground infront of her. We then find out that the phone call Taki made never connected, and the switching places stopped after that night.

Taki decides to travel to meet Mitsuha and his crush and school friend come with him. Its after a travel montage we find out why she didn’t pick up, she’s dead. The reveal of this is eluded to with the tone of the cut from where we last saw Mitsuha and those who pay close attention would have gotten hints to this being the case from earlier in the movie.

For me I didn’t notice the subtle hints and this was certainly a shock, I think out loud I even said “No” in a sad voice when this was revealed, I was already worried that she was dead from the audio cue in the transition when we came back to Taki. It hit me. The crystal like mysterious soundtrack here really nails the emotion here.

We learn at this point that Mitsuha died years ago, for some reason the messages on the phone get deleted which is a bit odd but needed for the plot I guess and it is confirmed Mitsuha was a casualty of the comet splitting apart. The comet being the first major clue of the time difference as there was no comet in the news in Taki’s time as it had happened years ago. With more subtle things such as the dates on their calendars on their phones not matching being an earlier reference to the time gap.

We’re then prompted to see the ribbon on Taki’s arm, another hint to the time difference. Its like the of Mitsuha had in her hair as a ribbon and we follow Taki to the shrine Mitsuha visited earlier in the movie and through drinking a bit from of Mitsuha left there at the shrine, we see some flash backing into her life and the ribbon a bit more.

Post movie I looked this up and apparently there is a thing to do with fate and the belief of being connected by hidden ribbons, they never tangle and always lead people to their destinies. Which is why the ribbon is so intertwined between Taki & Mitsuha. We also see how Mitsuha died again from the comet with the same audio cue as seen earlier, the dong acting as the comet hitting the ground.

Then Taki ends up in Mitsuha’s body again, which he is obviously relieved and then goes about trying the change the course of events in Mitsuha’s body to save her and the town. Obviously easier said than done for a high schooler. So he hatches a plan to force an evacuation with the help of Mitsuha’s friends using a bomb at the power station and the radio at the school. Knowing the school is outside the blast radius as we saw the destruction in Taki’s time from the school grounds, so its a safe place for everyone that gather.

We also learn that some of Mitsuha’s family have also experienced similar body swapping with other people and knew what was going on and new that it was Mitsuha but with someone else controlling her. This is followed by Mitsuha travelling to see Taki in her timeline, 3 years before he even knows who she is. Also trying to call Taki with no success at the same bridge Taki tries to call Mitsuha 3 years later.

The Emotions Hit

This was an emotional roller-coaster which really started now, I wanted Mitsuha to survive somehow and for them to actually meet. We see how Taki got the ribbon 3 years ago as Mitsuha gave it to him while saying her name. After only just being introduced for the first time in Taki’s eyes.

All this time Mitsuha has been making it up-to where Taki is in his timeline and the manage to meet for a moment. due to what Taki drank. They share some banter from them switching bodies which is pretty funny and Taki gives the ribbon back to Mitsuha who puts it back in her hair. You also get to see them starting to fall for each other with a really sweet soundtrack accompanying it.

They only have a moment and decided to write each others names down on their hand so they remember each other. But its suddenly cuts with the pen dropping to the floor when its Mitsuha’s turn, instantly changing to the tone with Taki struggling to remember Mitsuha’s name.

At this point the best track in the movie starts, named “Sparkle”, Taki breaks down forgetting Mitsuha’s name and we see Mitsuha executing the plan to save the town. The plan starts as intended but the adults get in the way of their plan. This whole sequence is mostly visual but gives me goosebumps every time I see it.

The most impactful moment being when Tessie see’s the comet break up as Mitsuha warned and its just in shock knowing what’s about the happen and all we can do it watch.

The music takes centre stage and is both dramatic while also being very sombre about the impending doom. Really nailing home the moment We also get to see Taki watching the comet splitting up from his rooftop in the city, having no memory of Mitsuha as this is all 3 years before the body swapping took place on his end.

We then cut to Mitsuha running to reach her father to convince him of the danger and she trips which trying to remember Taki’s name. She opens her hand to see that Taki didn’t write his name, but “I love you”. The music returns from a momentary break as Mitsuha gets up and has a stern word with her father. Then we follow the comet falling to hit the town and at this point I was literally in tears and the soundtrack hits back up into its final orchestral as the comet lands and we see the destruction it caused, not knowing if Mitsuha survived or not. But knowing that it wasn’t the same as the first time as Mitsuha wasn’t on the hill over the town watching it fall.

The Ending

With Mitsuha’s fate unknown once again we return to Taki, who has returned to the city & several year have past since the visit to the comet’s creator. We see that Taki ended up just being good friends with his crush from when Mitsuha was in his body around and they reminisce over the time since and the comet accident and what happened 5 years ago when they visited the town. As expected Taki doesn’t remember what happened on the mountain, and as his friends left for the city the day before no-one was there to remind him of what he did.

Its at this point we learn that the plan worked! with some flashbacks to the news of the time reported the town was destroyed, but the residents were all at the school for an “emergency drill”. Calling it a sheer luck, coincidence. Obviously we know differently.

This is further confirmed when Taki is looking at his diary with lots of job interviews in it in a café and hearing Mitsuha’s friends in the café talking at a table behind him. On his way home we also see Taki stop and turn around at someone, who we can guess pretty easily is Mitsuha but they don’t notice each other yet.

At this point I was just wanting them to meet FINALLY! Just rooting for them fully and all. They both notice each other on a normal day through their train windows and the final sequence begins. This is another point when I was tearing up, its so well done and I rarely tear up at movies. But I was just so invested at this point.

They finally meet, initially passing each other, then both turning around thinking they have met before and the movie ends with them asking each other their names. Its a lovely way to end things, refering both to the name of the movie once more and letting the viewer guess what happens next.

Conclusion

I would totally recommend this movie to anyone who likes a good mystery/love story. Its not the best for replay-ability as it will never hit you as much as it does the first time watching, but that’s true for a lot of media. I watched it in the Japanese voice with subtitles as it fits better than the English dub with the emotion of the character being better portrayed in my opinion.