Dev Diaries - Building a JRPG - Part 1

In staying consistent with what I had mentioned in the previous article, I feel like I've moved away from actually discussing abstract design in what I am trying to do when building a JRPG. It's mostly a mix of both now. Not only is it a hybrid of abstract discussion, implementation, and poking fun at my own incompetence at times -- it has also served as a personal diary of mine.

I have a lot of fun writing these posts. Blocking off an hour or two of my Saturday mornings since September 2019 to write these has also been a great way to reflect on everything through writing.

Anyway, I'm going to start calling this series Dev Diaries, mainly because of two reasons:

  1. I suck at coming up with titles.
  2. This is more of a diary than anything else. It frees me up to just write about anything relating to my adventures in developing a JRPG. The most important thiing for me is to have fun doing all this!

Given my style of writing, I will still likely be technically formal, because that is my nature!

Life Updates

So what's been happening with me lately? Well, things have been going great, as usual. Just busier than usual. 📈

  • I've been trying to nail down a complex project work. It's taken more time than I had originally (and sadly overly optimistically) estimated, and now I'm facing consequences in scrambling to make sure I deliver on time. jrpg-system is a hobby project, and so it has been put on the backburner this week, and possibly this coming week.
  • I finally bought a Nintendo Switch! Yes! A few years late to the game, but I finally have bit the bullet and got in the game! The first title isn't even a switch game, but Final Fantasy X/X-2 Remaster. Why this title? Well it's pretty much my favorite Final Fantasy title in the series, and it's also the game I will try to have my wife play so that she gets into the series too. 😄 I also want to study how a new JRPG player approaches something similar to FFX. I've been making some interesting notes I'll eventually share.

FFX Remastered

  • I've been doing some baby shopping stuff... Bought a bassinet from Amazon, and it's confirmation to me that... Wow... I'm actually going to have a daughter in about 3 months.

  • Gaming side of things:

    • Pokemon Red - Wow, I thought I could catch a L. 50 Zapdos with a party of Pokemon averaging only L. 41. What was I thinking? I'm actually going to pause on catching the legendary birds, and progress through the game until my party is stronger. Currently riding to Cinnabar Island, and fighting trainers is definitely a "free way" to level up.
    • Final Fantasy 6 - Been grinding away at the World of Ruin to try and turn a Cursed Shield into a Paladin Shield. So, there has been a lot of grinding! 😄 On the bright side, I'm insanely over leveled and over powered that Dino Forest is not a problem for my party. It always feels great to dominate! I haven't beaten the Brachosaur yet, but I should get that done by next week.

Dino Forest

Demo Time

Given that it has been a while since our last demo, I think it is just about time for a new one! The aim of the discussion today is to just establish what the next demo of jrpg-system should look like, and the scope of the demonstration.

I would ideally like to keep this demo small, and only demonstrate just enough of some of the latest features we have built so far in our character system.

For that, I think simulating a basic battle against an enemy in the style of a rogue-like RPG would be pretty cool. This would mirror some of the unit tests we have written together in the last chapter.

Assets

I would like to continue to use Cloud from Final Fantasy 7 as the character to be used for demonstration. I found a cool sprite on the internet that depicts Cloud in 16-bit chibi-form. ^_^

Cloud sprite

For the enemy in the world, I am going to stick with a basic Goblin:

Basic Goblin sprite

I think these came from the same artist. It all escapes me now, but they were floating around the internet. If you're the artist, please contact me if you would like to receive credit. I don't mean to infringe on anything! 😊

These sprites are sized at 96x128 in width x height for pixels. From what we can see above, then each frame of a sprite animation is 32 pixels, with each direction being 3 frames.

For the world, I am choosing to use this specific tileset as I think it matches the overall art style of the sprite so far:

World

Now, how about this for the background BGM? Sound familiar? Yep, it's the Shinra Corporation theme from Final Fantasy 7.

Scope

The vision I have for this demo is to simulate the unit tests we had written in the previous chapter.

  • Cloud, and the Goblin will be situated on a remote island in the world map not too far away from each other.
  • The player is able to control Cloud and can move up to the Goblin.
  • Upon collision, a battle loop begins.
  • The player can attack the Goblin while in the collided state by pressing some button on input. Right now, we just assume melee-style attacks.
  • In real time, the Goblin will also attack the player.

Sure, it's not a JRPG-like battle system, but pretty cool, right?

Things to Consider

I would like this demo to be a little more polished than some of the previous demos. That means there are a few things for myself to keep in mind:

  • Give some feedback when Cloud, or the Goblin is attacking, and the attack has connected.
  • Change the music to be a battle BGM when in the battle state. I haven't figured out which battle BGM to use yet.
  • Show a "HUD" indicating the HP of both Cloud, and the Goblin when in the battle state.
  • Oh! Maybe even show a sword strike animation over the Goblin when Cloud attacks, and then maybe a fist strike animation when Cloud gets hit by the Goblin?

Strike

Conclusion

Well, this post was short due to some craziness going on in my side right now. The goal today was to drive home, the point in what we are going to accomplish together over the course of the next few chapters.

Think of all this as a "project kick-off"... for those in the corporate world. See you next time!