I’m building a rather complex RPG type game with very deep NPC AI that is still academic into a potential MMORG type game.
I have played around and research a range of other technology and many can support this setup but most have limitations when it comes to distributing efficiently the processing across multiple servers and the ability to have a seamless world across multiple servers.
This is why we have started looking into Spatial OS.
I have been spending the holidays playing around with different setups, and relevant demos and reading the docs and many forum posts.
Spatial OS, I’m genuinely impressed by the architecture, it is very flexible, lightweight and optimised for distributed computing. It is very accessible in that it can easily interact with other libraries and external services and supports a range of programming languages. The worker architecture that separates the build and config of each worker type allowing for very specific workers in a range of programming languages to all be deployed together to work on the same game is excellent and really removes many of the shortcomings of other systems. The ability to really dig deep into the architecture and overwrite and adjust operations as needed is really useful and it gives the developers access to really control and finely tune their implementations.
Subscription email, the email feed is excellent. Initially, when I signed up to the forums and started seeing all the posts in my inbox I thought “seriously, I’m being sent all posts to the forums!”. I was about to go and change the setting but noticed an email with a relevant question and started to read and then another etc.
Now I think it is excellent, I get all the latest issues and their solutions, advice on structure and setup from the Improbable staff and other devs that share their knowledge. I read nearly all the emails or at least scan them briefly and I have learnt a lot from that and it is an excellent feature, thanks!
Docs, In the last six months they have really improved and most of my questions are answered. Certainly, they are very comprehensive to get developers started on a project, and to explain the core structure of the Spatial OS architecture. The basics and core functionality of the workers, entities, components, their attributes and functions are well covered and in an open and accessible manner that demonstrates how flexible the Spatial OS components are.
I have a wish list of additions and I know these are advanced topics and I’m not expecting this to be immediately added. I’m just suggesting what we would find really useful in advanced docs, if it is already there and I missed it then please send me the link:
1 Memory management, deleting component entities, how to effectively delete all related objects on all workers as relevant. Many things to consider:
- Worker that loses the authority of an entity will often want to delete all relevant objects.
- Deleted entity, all workers that had read that entity will likely want to delete their objects
- Client specific issues, the client may still need to do animations before deleting, e.g. death animation and so requires to retain the relevant objects for that animation before deleting.
- Managed worker specific issues, some workers may need to store information in some permanent storage or trigger some other entity specific actions that could often include accessing external services. This may mean that the worker needs to keep instances until that final process has been confirmed successful. That this process isn’t lost and with it important player data if the worker crashes.
- Handling resource heavy processing, i.e. memory and or processing, and how that could best be isolated and optimised away from the fast-paced interactions.
- How to guard against workers not taking on too much and be able to delegate to backend workers.
- Optimising back-end workers.
- The operations processing, good strategies on how to timely process the operations such as delegating tasks to threads and not to block reading and sending heartbeats or timing out because the Ops processing is waiting unnecessarily to get lock i.e. some thread is blocking with a lock it does not need.