Hey folks!
Time for a monthly update of what has been going on with the game's development.
I want to start off with a little bit of an exciting story...well, exciting for me.
Somon has been my artist for over a year now, helping me with the art in this project. However, during that time, it has always been business, business, business. I hardly knew anything about her (I wasn't even sure if she was a she). While she does live in the same country as me, she lives quite far away. So meeting up to discuss things in person has never been possible.
So it was to my surprise, this past Monday morning. I sat down at my desk at work and checked my email to see I had a new message alert on Pixiv. "I'm going to be in your area to meet some friends today and tomorrow. Do want to meet afterwards?"
I was shocked
:LZSlol: I was actually really busy both those days - not to mention her flight home the next day was too early for any person with a day job. But I left work early (shhhh, my boss doesn't know) and was able to meet her!
I didn't have any time to buy her a souvenir from the area (it's a custom in the country, not to mention, just plain ol' polite) so instead I hastily cooked up a book of memories for our time working together. I wanted to share it here, though I've edited it a little bit.
Warning, if you don't watch my streams and don't know what I look like, you'll get a surprise face reveal on the last page of this little art book. It goes over a brief history of the art with the game's development.
Mind you, the language is simple so that Google-sensei could translate it easily, and also...I mean, I only had like an hour to put this this together, so like...rushed doesn't even begin to describe how quickly this thing was thrown together.
Art Book
(page 2 has been cut. It featured the first message I sent to Somon ever, asking if she was available for comissions)
We both laughed a lot at that disappointed streamer face
:LZSlol:
We also laughed about this page, because it's development took so long. She was too busy being addicted to Final Fantasy 14
:kaoeh:
And finally, a happy memory made together!
Now for some updates!
Actually not a lot has gone on since the last one.
I spent the past month working on mapping. The forest map has been fully mapped out:
I haven't been very happy with how flat the maps look. I'm not talking about cliffs and stuff (although those do help a little), I mean that I feel like the game feels so...unprocessed - missing some cool lighting effects, you know?
So, I started playing around with parallax mapping. Now, doing a high quality parallax map for every map in the game would way over scope things, so instead I aimed for speed-parallax mapping. Basically 2 simple layers that I can quickly run a brush over and call good within less than 40 minutes. And so far, it has worked well enough. Just adding some additional shadows and ambient occlusion helps give some more depth to the map without doing a bunch of additional "off-grid" detailing.
Since the game was built around tiles and not parallax maps, I (of course) created the option for players to remove parallax maps. In Options -> Visuals, Parallax quality can be set to Max, Low, or none. This will either show all layers, show only the bottom layer (ground layer), or remove all of them. This doesn't impact performance a lot in the forest, since the forest itself is small 50x50 chunks, however, where I really wanted to use this Parallax mapping is on my humongous Seas map, and here it definitely impacts performance.
This map is 255x255. Now, we've all (hopefully) seen the discussions about how a parallax map of this size can bloat memory usage. But I had to see for myself what it does.
While testing this, I made an interesting discovery. It heavily spikes RAM usage at first and really slows load times down when entering the map (or opening the menu), but it barely exceeds 1GB of RAM utilization, which I would say is within the safe limits. Once the garbage collection comes in, it drops down to a more reasonable 350~MB. Actually, what's fascinating about this is that that 350MB is barely more than the forest map with all the parallax maps enabled. It makes me wonder if there is some sort of image culling or compression that is done by the engine. But it should still be in RAM...I'm not sure what is going on here.
Anyways, to speed things up, the parallax itself has been split into 3 major chunks, which allows the engine to load them more efficiently to reduce the load time when entering the map.
This is obviously not the full map. The map is so large that by the time I shrunk it down enough to be able to upload it to the forum, all the parallax detail wouldn't be visible. This is just one small chunk of the map.
Along with this, I have wanted to rework how enemies function in the game.
To most players (who beta tested the game) likely won't notice much of a change, but it's a huge change for optimization as well as control of the types of encounters plus some general polish!
Before, enemies functioned as so:
- Enemy occupied a region as a parallel event to update enemy coordinates.
- Game also ran a parallel event to check player coordinates and region
- When the player enters an enemy region, change enemy AI behavior to pursue player. If the enemy coordinates matches the player's coordinates: start a battle.
The problem is that the battle would usually trigger once the X&Y match, but due to how grip movement calculations are done this would make it appear like the player and enemy pass
through each other. This didn't necessarily cause any problems, but it did look unpolished. During some early testing, I realized lowering the wait frames on coordinate checks reduces this problem, but doesn't outright remove it. So I had settled on that for awhile. (of course, less wait frames is not ideal for optimization)
The second problem I wanted to solve was making enemies random.
Before, enemy encounters were "scripted" in a sense that each placed enemy event would be a specific fight. While this is necessary for some fights (as often the first fight you encounter in each level is meant to be the easiest troop for that level to act as a "tutorial" for the new enemy types) most fights in the level should be random! So I wanted to devise a way to handle this...I could technically make every single enemy do a random check before starting the encounter, but that's quite cumbersome...
The new enemy function!
- Regions are no longer important for the enemy function (but still used to determine other things). Instead, events are used to mark when the player enters or exits an enemy's "territory" (region).
- These events change a self-switch on the enemy to change it's behavior (change to a pursuit or move randomly move route depending on whether player is entering or exiting the territory)
- The enemy itself is marked as event touch, so now combat begins much more reliably and no longer does the player randomly pass through the event before entering combat. This looks way more polished!
- The encounter itself has been moved to a common event. Each level now has it's own common event where it will pick a random troop encounter applicable for the level. Additional logic has been added to the random encounter event to prevent it from selecting the same troop encounter twice in a row. And if I want specific troop events for specific encounters (such as the aforementioned tutorial troop), I can just assign the battle processing for that troop to the event and skip assigning the common event to it.
Although I still need enemy regions and player coordinates for my lightning rod mechanic, it's not as high priority, so I have been able to increase the wait frames on the parallel events, and of course, every enemy is no longer a parallel event itself, so I got some performance gains! (But not as much as you would think because I had built a special parallel event culler so that all enemy parallel events are not being processed at the same time)
Finally, I am making steps to rework the intro. I briefly talked about this...somewhere, probably in a previous post in this thread...
The intro has always been this ham-fisted thing that was quite long. No subtely in the message and themes of the game, too much talking...it just needed to go.
So I reworked the intro.
Not only is the intro much snappier, but it also acts as the battle tutorial. So effectively, I was able to roll the story and the tutorial into a single section, which reduces pacing problems later.
I have only remade the map and written the new script, but this has not been fully implemented yet. Somon is making some very, very special (and expensive) art for the intro. Since I
was working on the Forest level prior to getting distracted with this new intro, I want to go back to focusing on the Forest until Somon is finished with the art, and then I will fully implement the new intro. Maybe once the new intro is complete I can run a second beta test
:LZSskeptic:
Anyways, here's that map:
That's all I want to report for now!
Thanks for reading all this
:LZSproud: