I have had a few concerns about how the rituals work in this game so far, so I have made some progress on redesigning the way that we do “research”, which is the underlying model for rituals.
Currently rituals are done using a type of Action – a long running action that has a cost. When a ritual is started, the cost is taken and the player is given that action. During this process you would have the action cost refunded if you cancel it (which you can’t really do at the moment).
This has some issues:
- Actions are very long running, and you can’t change during the action without losing all your progress.
- This reduces player choices because if they change they will lose progress and makes it hard to, for example, respond to events (if we had them!).
- There is also a risk that players may cancel the action accidentally and lost a lot of progress.
- Only one actor can participate in a ritual.
- This is bad for gameplay as you can’t use your familiars etc to help with rituals
- This is really bad for the story as a lot of witch rituals should be multi-participant – in fact it would make thematic sense that some rituals can only have progress if more than one actor is taking part!
- The action has a cost.
- This has to be refunded in order to be fair to the player. this is complex and may result in the player losing resources.
To address this we can simply provide a disconnect between the action and the result. So rather than Action complete -> Ritual complete we add a stored progress value into the ritual data:
On Action Complete
Add Progress point to ritual
If ritual is now complete
Do Ritual Complete
And to deal with the initial cost, rather than the Action having a cost, we have a one-off, non-refundable cost for the ritual. Once paid, the ritual is marked as paid for and actions can add progress to the ritual.
This means now that we can reduce the action time for a ritual considerably, and add a total progress requirement. This means:
- The actions can be cancelled safely, as all you will lose is a very small amount of progress – and you can wait for the action to complete without having to wait hours. This deals with the first problem above.
- The rituals can be done by many actors at once as each one would be adding points into the global pool. This deals with the second problem above.
- As the cost is one off, it is never refunded, but the fact you’ve paid has been stored so you will never pay it twice. This deals with the third problem above.
The research manager now has to store additional data about current research:
- Has the initial cost been paid?
- How much progress has been made?
This is simply an extra two variables, but will need a slight change in the model as currently we only store if the research is complete or not. This means we’re going to need a new research structure.
We’ll also need to implement the changes in actions to support this style of research action.
Breaking this down, I’ll need the following:
- Create a new Research entity with paid, complete and progress variables.
- Add serialisation and deserialisation of this entity.
- Allow loading old saved games by converting the list of completed research into a list of complete research that has been paid for.
- Add total progress required to ritual rules objects and reduce the time for the actions.
- Remove the cost from the action and add it to the research rules.
- Add progress to the research on action complete.
- Add trigger for research complete when the progress is sufficient.
- Change action cost check to mark the research as paid.
- Change action system to repeat research actions while the research is not complete.
As this is very early and there’s no serious players yet (I think) or many rituals I’m going to be mean and not refund research actions. You will have to pay again. I wouldn’t do this for a live game, but this is a very incomplete game!
Anyway, this is going into my 0.4.0 release plan. It’s not a huge amount of work, but it will alleviate some of my worries about cancelling actions which was part of my last 0.4.0 plan.