Hi everyone
Development of the mod continues.
In the previous post I mentioned about cursed soul fragments which are items acquired on death in order to encourage players to reset the enemies by interacting with bonfires. Here I will expand on that with some additional mechanics and some insight into the development behind it.
Company of Champions (covenant)
In the vanilla game, this covenant has the following effects:
Enemies will respawn indefinitely
Players are blocked from summoning friendly players & NPCs
More invader slots are available for these players
Of course, having a covenant that disabled co-op in the seamless co-op mod seems counter-intuitive, therefore I have removed this and instead players in the Company of Champions will have world effects as if they were at maximum Cursed Soul Fragments at all time, and resting at a bonfire will not remove the effect.
This will give players an opportunity to play the game with increased difficulty and extra mechanics if they wish.
Disasters
As mentioned before:
Between 50 - 100% saturation, your world will become more vulnerable to disasters - I will keep this a secret for now as I wouldn't want to completely spoil it.
I did want to expand on this in this post and reveal the mechanic, as I'm always accepting of feedback on ideas that I've had.
When you acquire Cursed Soul Fragments, your world will become vulnerable to "disasters" in a similar sort of mechanic to how black world tendency works in Demons' Souls. Normal enemies you encounter will become grave enemies (identifiable with a red hue), hit harder, and give more souls as a reward.
In seamless co-op, killing these grave enemies has a small chance of creating a disaster. An example of this is a powerful enemy may spawn in the place of the fallen grave enemy.
Rewards are granted if you are able to defeat a disaster, however they are very challenging and will follow you through the entire map and they will persist even if you rest at a bonfire.
Below you can find a short video showing a disaster encounter in one of the early-game areas. Please note that the mechanic is still a work-in-progress so is not a final result.
https://www.youtube.com/watch?v=twG40LF1Bms
Mechanics behind disasters
Developing this was not easy to pull off, and was a really fun challenge for me to undertake. In short - I have written a system that lets me spawn any enemy, from any map, anywhere, at any time.
First of, a few specifics:
EnemyGeneratorCtrl -> Contains basic enemy parameters and must be present to correctly load enemy models, AI, bullets, etc.
CharacterCtrl -> The actual enemy instance and the entity you interact with and fight in the game
When you load into a map, the EnemyGeneratorAreaCtrl class will be constructed and load a list of enemies located in GeneratorParam for that specific area. A maximum of 255 enemies can be added to this list.
Each enemy will create an EnemyGeneratorCtrl pointer. Not all enemies are loaded immediately (unlike in other souls games) and they will have a CharacerCtrl instance created from the respective EnemyGeneratorCtrl on the fly as you are walking through the map.
I have rewritten the constructor for EnemyGeneratorAreaCtrl which allows me to insert custom GeneratorParam instances into the map. This means that the enemy model, AI, and other assets get loaded along with the other enemies. I can then run my own custom logic to create the CharacterCtrl instance of the custom enemy that was inserted into the area.
The advantage of this system, is that even though I create only 1 instance of a custom enemy, I can spawn that specific enemy as much as I like - meaning each EnemyGeneratorCtrl pointer can create multiple CharacterCtrl instances, such as in the video below (apologies for the keyboard noises):
That's it for this post, there are other more benign bug fixes and QoL things I have made in the background but I don't feel like a lot of them are worth mentioning.
Thank you for your patience, and a huge thank you to all of my supporters <3
Take care
~ Yui