Well now, a lot has gone on since my last update. A lot of it has been behind-the-scenes stuff like refactoring and optimizations and more refactoring (which I’ll talk about a bit further below), but I have introduced something new to the artificial ecosystem. For the time being they’re called “herbivores”, and they eat grass!

New friends!

You might also notice the grass looking a bit different; I’ve been doing a bunch of tweaks to existing behaviour as I go, though nothing huge. I’ve mostly just been trying to make something that looks aesthetically pleasing at this point. The biggest change is letting the grass populate up to about 10 squares away; this makes it more possible for grass to return to areas rendered barren by voracious herbivores, as well as makes the overall shapes less homogenous.

Now, a significant issue with the herbivores at the moment – at least in terms of establishing some sort of equilibrium in the ecosystem – is that they are far too efficient. I essentially built them on top of grass with modified parameters – plus the ability to move and consume grass – so they are essentially always trying to either eat and reproduce if possible.

That’s a lot of friends

Reproduction currently is only limited by a percentage chance, which means that if a single herbivore is likely to reproduce at least once in its lifetime, then it’s at least possible that it could reproduce twice, and each additional herbivore increases the likelihood of more being born, leading to overpopulation inevitably consuming all available grass.

The horror

You can see near the end a small pocket of grass was able to re-establish due to the newly increased propagation range, however, it ends up being moot. I have some plans for how to improve this behaviour that mostly revolve around making the herbivores less efficient; such as making them get hungry less often, give them a diminishing likelihood to reproduce multiple times, etc. I would like the reproductive cycle to be more “generational” than “relentless swarm.”

You may also notice in the 3rd image that it’s starting to encounter some slowdown; these herbivores have been a really excellent exercise in pointing out poorly optimized portions of my code. This is also another big issue with how efficient the herbivores are; it was fine for grass to be very efficient because their operations are relatively low-cost. Herbivores, however, need to regularly search for meals as well as pathfind to reach those meals, which can become very expensive to do constantly – particularly when they start getting further away from meals and/or can’t find a valid path. The measures I talked about above should help with this as well, plus I also want to give them the ability to remember their paths for a period of time; currently each herbivore re-checks that the entire path to its next target is valid every time it wants to take a step. That’s good for accuracy, but very bad for performance.

My next main goals are, in order:

  1. Add behaviours and tweak the herbivores until the ecosystem can find some sense of equilibrium without grinding the FPS to a halt. I want to be able to let this run for some time.
  2. Allow the critters’ parameters to drift over time. When a creature reproduces, I want its descendant to have slightly different inclinations.
  3. Build some sort of UI that lets me inspect the individual entities and see what sort of parameters they optimize towards as the “fitter” settings should produce more offspring.

And now I’m going to delve a bit into the more technical stuff that I’ve been up to. I’m putting this at the end in case up until this point has somehow been within your threshold for nerd shit, but no further.

Aside from lots and lots of incremental changes in order to get specific things to work, I’ve made two major changes in how the code is structured and operates.

Firstly, I consolidated all of my non-water entities into their own singular class. This was due to the fact that in Unity if I want a script attached to one game object to interact with the script of a different game object, I need to write the name of Script B into Script A. This isn’t an issue if I just want to allow the Herbivore object to trigger some interaction in the Grass script, but my end goal isn’t to hard-code specific interactions – rather to build the rules behind the interactions and let those operate in a more arbitrary way. So, in the interest of not coding myself into a corner, I moved all entity behaviour into a single script and allowed those to be controlled through parameters. E.g. a creature with 0 “speed” isn’t ambulatory, even though its script has the code required to move in it.

I had actually started on an early version of the Herbivore and sorted out a pathfinding script before deciding to make this change, so it required a lot of backtracking. But I’m feeling much better about my ability to scale this to additional entities; any work I put into building any given entity is also extended to any future or existing entities, which is the sort of efficiency I can get behind.

The other significant change was getting the controlling “brains” to split off when they reached an entity limit. This was something that I hit a roadblock on before condensing all entities into a single class. Each brain needs to know what kind of entities it controls, and the master list of brains also needs to know what kind of entities the brains it lists control, and the thought of creating a new list of brains for each entity was unacceptable. I made a few attempts to make this dynamic and work with multiple entity types, but it just ended up getting tied in knots that I didn’t know how to untangle, and I shelved it for a while. Moving everything into a single entity cleared that up, and let me finish the implementation. This was also necessary, because the behaviour of multiple herbivores under a single brain was quite poor (each herbivore under a brain would have a random chance to move towards its next meal each cycle), so this let me keep using the brain approach, but only allow each brain to control a single herbivore before spawning a new one.

Some technical goals that I have coming up at some point aside from the more functional ones above:

  • Allow for entity configuration to be stored to and read from physical files.
  • Figure out a good way to store entity parameters in a sort of balance; e.g. as one raises, one or more could lower. I’ll delve more into the functional reasons behind this when I get closer to doing it.

Hopefully it won’t be a full damn year before my next update, but, it might!

I had originally planned this out to be a collection of my thoughts on the FFVII Remake in general, but by the time I got done talking about the music, it felt better to split it out into parts. The other parts will likely be more substantive in terms of talking about the game itself, but as this is the topic I’m most critical about, I wanted to place it first. Also, I’m leaving the introduction as-is from before I decided to split it up, so, here we go.

I am hesitant to call this a “review” – partially because it’s difficult for me to view this game with much objectivity, but also because a “review” isn’t exactly what I want to do here. To say I had high expectations for this game would be an understatement; I did my best to go into it with an open mind and to be accepting of change, but in the 20+ years since the original’s release I’ve had more than enough time to build up a strong image of what game I’d want the remake to be. I’ll be upfront and say that it wasn’t that game – at least not entirely – but it was a stunning product nonetheless. And I think that, rather than try to review the game from the perspective of an impartial observer, I would like to talk about my experience and what it meant to me through the lens of an ex-10-year-old kid who used to be so enamored with the original game that he would hunt down magazines with FF7 articles to read and re-read them over and over during the periods of time between when he could visit his one friend with a PS1 and actually play the dang thing.

Now, as I mentioned above, this was not the exact game that I wanted, but I knew that it never would be. The game that I wanted was just the original updated in a way that would perfectly satisfy my personal nostalgia feels. But to actually expect that is, in my mind, a selfish and empty desire, and in the end I’m glad that that’s not what they produced. The game that I did get to play was ambitious, surprising, fun, and – most importantly – absolutely brimming with attention to detail and care.

I am going to be critical of a number of things below because I care so deeply about the series, but regardless of any missteps I may note, I don’t doubt for a second that the folks who made it put their whole heart into crafting something that was not only faithful to the original, but also something new and exciting for returning players. And for that alone, it will always be a very special game to me.

Warning! Spoilers.

Music

Alright, I’ve gotta get this one out of the way first.

Background: The original FFVII OST was one of its most memorable facets – and the one that I think shines the brightest beyond just nostalgia. On top of the typically stellar (and, in my mind, peak) composition quality of Nobuo Uematsu, the decision to generate the music in real-time on the console (opposed to pre-recorded audio) gave the game a highly unique and stylized sound. The synthesized instruments and effects were of a higher quality than its predecessors on the SNES, but with less realism and fidelity than those that would come later, setting its audio completely apart. All this to say: the music was an integral part of the original experience of playing FF7 on the PS1, and was a driving force that accompanied every emotion I felt while playing it, which is why I find it very disappointing that the music was one of the more underwhelming facets of the remake.

The FF7 Remake’s OST is largely re-arrangements of tracks from the original which is, in itself, an idea that I love. (Note: Nobuo Uematso is listed as a composer for the game, but I believe this is only for his role in the original composition as well as the new ending theme – Hollow. It looks like the soundtrack work was done primarily by Masashi Hamauzu and Mitsuto Suzuki). I grew up listening to fan-arrangements of video game music and they were a wonderful way to pay homage to the source material while also exploring and transforming it in new ways, which is an approach that fits right in with the spirit of a remake. And while there were a lot of places that the new soundtrack did hit that mark, I felt like it was trying to do too much, and lost sight of what made the original soundtrack so iconic.

I think the easiest way to illustrate this is with the Remake OST’s track list: https://www.jp.square-enix.com/music/sem/page/FF7R/ost/en/SQEX_10768_75/. Namely, the sprawling one-hundred-and-eighty tracks that it lists (150 if you don’t count the 30 collectible jukebox songs). For comparison, the original OST was 85 tracks for the entire game, and other more recent series entries also have similar lengths (85 for FFXIII and 96 for FFXV). And, remember, the remake only covers a portion of the original game which only puts about two dozen songs “in play” within that portion of the story (before counting songs like the Chocobo and JENOVA themes which make an early entrance).

Obviously a few dozen tracks wouldn’t satisfy a full-length game, and the approach they took to pad things out – a blend of updated/re-arranged/remixed version from the original supplemented by some brand new compositions – again, absolutely makes sense. I can also see how their attempt to closely tailor the soundtrack to each moment of the game could lead to such a gargantuan track list; they clearly wanted to do something extraordinary, and I’d even say they succeeded at that. It’s an incredible feat that I’m sure they didn’t simply decide to undertake on a whim, but while doing so, they didn’t give the original – and I can’t overstate uniquely iconic – source material enough room to breathe.

One thing that was surprisingly rare in the remake OST is vanilla reproductions of the original’s tracks. And by “vanilla” I mean where they primarily updated the instrumentals but left the fundamental structure of the song in place. As an example, the most straightforward version of the main battle theme is the third one that you hear in the game (out of about 5 or 6 in total). Failing to properly establish the source material makes any alterations of it lose meaning for new players who don’t have the proper background. A person dropping into this remake in media res simply doesn’t have the context to feel the impact of any unexpected tonal shifts or key changes. However, if we assume that returning players were the focus, it doesn’t necessarily make things better.

They had the ability to trigger instant emotional recognition for every single returning player simply by hitting some specific motifs and musical beats (as evidenced by me nearly weeping when the intro cutscene/music transitioned into a beautiful homage of the original intro), yet instead they seemed far too eager to add, embellish, and alter fundamental points of the original songs and missed out on a lot of potential. When what felt like a majority of the re-imagined tracks included unexpected tonal shifts or key changes, different time signatures and tempos, or were straight-up EDM remixes, I am left with the impression that at some point they started making changes for the sake of change rather than for specific intent. I don’t actually think that was the case, but it was certainly how it came across a lot of the time as I was playing the game.

To round this out with a more positive note, I want to talk about some things I liked. While I disagree with the direction it was taken – the music is undeniably of very high quality, and does lend the game its own unique feel. I thought that the idea of having extended cinematic mixes of the boss themes to match the cinematic multi-stage boss fights was very very cool. As I’ve already said: I do believe they wanted to give us something extraordinary and put a lot of effort towards that end, and I think that on its own can be appreciated. I also have nothing bad to say about the new compositions that were introduced – other than the crowded nature of the overall score made it difficult to really get to know them. The effort and quality that went into the music absolutely aligns with the high level of detail shown throughout the rest of the game, it simply failed to make the sort of emotional connection that I know it could.

Addendum: I also have to take a moment to gush about Hollow – the new ending theme that was composed by Nobuo Uematsu; it simply blew me away. Based on his comments, it sounds like a main ending theme with a famous vocalist was part of his desires for the first FFVII, so it’s really cool to see him able to now realize that vision. On top of this he absolutely nailed it, and frankly sounds more like an entry from the original OST than most of the re-imagined tracks on the new one.

Up next, I’ll be discussing gameplay, visuals/experience, and story. Likely to be split over at least two more parts. Hopefully soon!