Y2k is an upcoming third-person JRPG inspired by Final Fantasy, Earthbound, and Haruki Murakami. It follows the misadventures of bearded college graduate named Alex Eggleston as he hunts through a '90s message board for information on the mysterious "Death Cab." Y2K also contains weaponized panda plushies and killer alpacas. This is the dev blog you are looking for.
Crossposted from Ackkstudios' devlog.
So you just killed a group of slimes and got enough EXP to level up your party.
Ever wonder what goes into the crazy calculations needed to go from level 1 to level 99+ in an RPG?
Most JRPGs have some sort of logic behind the seemingly random stat increases, but they don’t often make it easy to figure out.
I have been researching this ever since the first Y2K demo (which had leveling up enabled at first, but was disabled due to a bug I found last minute). It turns out that some gamers have resorted to hacking to figure out what goes on behind the scenes.
This was very exciting for me, as I could see what was going on behind the scenes in in the likes of dragon quest and final fantasy. I won’t get into those games much, but I will say that the information is out there.
An uphill battle…
there are many calculations to focus on. The easiest calculation for me to research was the experience curve. this formula dictates how easy/hard it is to gain levels as the game progresses.Every game does it a bit different, but balance is always the goal.
If it is too easy in the beginning then too hard at the end to gain levels, the player will need to spend more and more time fighting enemies.
Progression cannot be too linear either, or the game may become boring and predictable.
Players also shouldn’t be able to become too powerful too early unless they work hard at it.
It often isn’t enough to simply make weak monsters give less experience: it is important that each time the player levels up, it becomes slightly harder to do it the next time.
Experience given at the end of the battle in many rpgs is often calculated based on your level with some math gymnastics to try and hide the logic. Some games take the easy way out and have a pre-defined list that can be carefully hand tuned for each level. I could see wanting this for extra control, but I don’t think it is necessary.
This is a deep topic, but you want the points required till the next level to steadily rise, but not predictably. For example adding +100 each time you level up would be terribly repetitive, and increasingly easy to fulfill.
What I’m doing for now.
Sorry about the censorship above, but I don’t want to show off the calculation until it’s final (if at all) I will say that they are fairly low numbers. On the plus side, it turns out that this is the most boring of all the calculations.
Some games will give a random stat increase when you level up, but this can lead to unfair stats on a character if you get a couple of bad randomly generated numbers in a row (*cough* Fire Emblem *cough*).
Final Fantasy IX had a nice system that was largely invisible to the player, but seems to calculate your strength based on base stats, level, and current equipment in hand when a level up occurs.
The Strength attribute in Y2K is similarly calculated depending on the characters level, base strength, and Strength Bonus. Strength Bonus can be modified in a few ways, but generally it changes in value based on which attacks you like to use, which items you have equipped, and choices made in conversation.
I’m thinking about being transparent about this stat in the game and allowing players to play in a way that they can balance the Bonuses the way that they would like.
Calculating current strength per level:
Character.stats.strength = (((lvl * 3) / 10)+baseStats.strength) + ((StrBonus/ 32));
(//ignore the use of magic numbers please)
The base stats for each character are different, so the stats will be different as they level up.
the base stats are fixed values and all strength calculations are based off of them.
The non fixed values are the characters lvl, and the StrBonus. These the player can influence in various ways to make the character grow as they see fit.
Other attributes have similar calculations such as luck:
Character.stats.luck= (((lvl * 3) / 20)+baseStats.luck) + ((LckBonus+luckyCharm)/ 32));
Again, here the base stats are static values but the lvl and LckBonus+luckyCharm can alter the value greatly. The fixed numbers (3,20, and 32) keep it within a range I like as the character progresses.
A closer look at the results….
I added a function to print out the character stats from level 0-100 (with no stat enhancing modifiers) Here is an example of some of the output:
Character lvl: 51 hp: 3435/3435 pp: 221/221 str: 40 def: 38 spd: 28 luk: 23 spr: 30
Character lvl: 52 hp: 3453/3453 pp: 222/222 str: 40 def: 38 spd: 28 luk: 23 spr: 30
Character lvl: 53 hp: 3467/3467 pp: 223/223 str: 40 def: 38 spd: 28 luk: 23 spr: 30
Character lvl: 54 hp: 3648/3648 pp: 229/229 str: 42 def: 39 spd: 28 luk: 24 spr: 31
As you can see, HP increases faster than PP.
Taking inspiration from other RPGs, I calculated current HP/PP using the base HP/PPvalues against a table of predefined values-per-level. Perhaps I’ll go into that calculation another time.
AckkStudios is the collective name for the genius minds behind GBA love letter Two Brothers/Chromophone. They're current working on Y2K, the JRPG hipsters everywhere are waiting for.
We're Ysbryd Games, the plucky publishing outfit with a big heart and the name that makes you go, "Gesundheit!" Based in Southeast Asia, we're a tiny operation looking to bring more narrative-driven goodness to the big, beautiful world.