Hi again! Another month, another milestone. Development is progressing at a steady pace, and the game finally has the basic gameplay loop in place: pick campsite, fight hostile spirits, unlock new abilities by defeating them, move onto the next level with harder opponents.
What's new?
I started off with some optimizations, because the game was running at ~17FPS in debug mode. I streamlined game logic to the point where I got this framerate up to 30, and then I promptly splurged on putting more objects in a level to the point where the FPS dropped back to ~20. Profiling shows me that 60% of CPU usage is due to rendering, so further optimizations will require implementing batch rendering (probably will need to start using OpenGL instead of just pure SDL). However, in release build the game runs at 60FPS on my system (Ryzen 7 2700X), so this optimization will be left for later and for now focus will be on expanding and improving gameplay.
Next up I implemented unlocking of new abilities. Fighting a hostile spirit lets you lower it's presence stat, and when it drops below a threshold you can break it and gain one new ability from the list of secrets that the defeated spirit holds. You get a choice between global spell, avatar spell, ritual or crafting recipe; one random option is available for each category. The downside to breaking a spirit is that the resources it spawns dry up, so you have to stay on the move to keep your tribe from starving.
I've then added some more content so there's things to actually test ability unlocking, including a whole new water spirit as an easier opponent compared to the wood spirit I already had. To keep track of what spirits are present I added spirit overview bar that lets you see at a glance state of all the spirits and select their focus object.
As you can see, I've also added personal names so you can tell apart different spirits of the same type, and since I was doing names I decided to give personal names to the tribe's humans as the first step in making them individuals. The names are currently drawn from a names file, but I'm considering implementing a random name generator.
Crafting recipes are currently tracked per human, and unlocking a new recipe doesn't give it to any individual, instead it just lets you teach it to your people at a cost of mana. The good news is that humans can also teach each other, when a human crafts something all other humans nearby will learn the recipe as long as they meet stat and skill requirements.
I've also kept working on misc UI improvements, such as adding toggles for icons on the minimap.
With combat and ability unlocks in place, the only missing piece of the core gameplay loop was tribe migration. The overworld map is however scheduled for next milestone, so for now I just implemented switching to a new randomly generated level where you can pick your tribe's camp site. I also implemented difficulty scaling which means the hostile spirits' stats increase each time you change level, and you get less antelopes and more hyenas on the map. When switching the map you can bring along some of the items your tribe collected, limited by size of the tribe members' inventories and your mana. This is all very temporary, just to get the ball rolling with testing the gameplay loop, and will be replaced with an overworld travel mode where you can choose your next camp location in a persistent randomly generated world, and the migration range will be limited by how much food you're carrying and how fast your tribe is moving (hauling lots of stuff or having injured people will slow you down).
I've spent the last few days fixing minor bugs and tweaking the content, and I got the game into a playable state, though it is still very unpolished. I've done some basic balancing so it's fairly challenging, though I must admit that a big part of what makes it hard is the fact that your tribe are a bunch of idiots. Still, I think the actual spirit combat challenge is more down to interesting mechanics rather than unwieldiness, so I reckon I'm on the right track. So here's a fresh full screenshot to finish off this update:
What's next?
As I've mentioned, the next milestone on my development schedule is the overworld. I intend to have a large persistent world that's generated when you start a new game, and you can migrate between different local areas in this world. You start off in easy areas, and as you unlock new abilities you can migrate to harder areas where more difficult hostile spirits will get you access to higher tier unlocks. In the finished game this will be different types of spirits, but for now I'll just scale up difficulty of existing spirits to avoid getting bogged down with content creation and not getting any features done. Especially since I've yet to implement content editors for easier addition of content and modding. I'd like to also do some work on my map generator so I can have geographic features like mountains and rivers stretching over multiple local areas, but we'll see how that shakes out.
But first I'll need to do some work on AI and tribe management, because as I've mentioned right now they're a bunch of idiots, and as I've tested the game I felt there's a serious lack of control over the tribe. I don't plan to get into too much micromanagement, but it'd be nice to be able to prioritize tasks and restrict specific jobs to specific humans. I'll decide where to draw the line between manual control and automation based on playtester feedback.
Playtesting
Since I got the game to a basic playable state, it's time to start with some testing. The goal right now isn't so much to find bugs and polish content, as it is to adjust the game mechanics so the game is actually fun to play. Since this isn't the case yet I'm not really comfortable with releasing a public test version but would rather stick with a limited set of testers that won't be turned off by big changes in game mechanics. Once I've reached a semi-stable set of game mechanics I'll release a public test version and use feedback from that to polish the game into a release ready state.
If you'd like to help with playtesting, please mail guidingspiritgame(at)gmail.com or join the Discord channel
That's all for now, and I'll be back with another update when the next milestone is done (which may take a bit longer this time). See you then <3