It’s been a long month since my last update. After losing my dog and constant companion of over 12 years, I then came down with COVID-19. Thankfully, I never developed any of the worrisome symptoms, but it still took a lot out of me. Additionally, the grieving process made me spend a fair amount of time reevaluating my motivations in life.
Thankfully at the end of the day, I found myself reaching the same conclusions I had reached the last time I second-guessed myself. But, I made a crucial decision: the primary reason for me doing this is to bring myself happiness and hopefully make enough money to make ends meet. This goal will be achieved both by streaming and hopefully teaching and inspiring others to create their own things and trying to build a community around a positive multiplayer game.
I’m not rushing to get back into streaming. I’ve still been finding myself more tired than I expect to be, and I assume it’s still myself getting back to normal after recovering from COVID. However, I am going to start streaming on days when my wife is working, and I’m feeling confident in knowing my goals for the day.
But, enough about me, let’s talk about news related to the game.
The Honor Sagas Game Design Updates
The Honor Sagas Summary
The Honor Sagas is my ambitious attempt at building the ultimate casual MMORPG. The Honor Sagas is about a battle between those of honor and those of deception. You play as an inhabitant of Munsin, a realm protected by Kuo. Munsin is composed of thousands of floating islands, with a central hub located near a shrine that grants inhabitants passage into Seweka, the dream world.
In the dream world, Kuo no longer acts as a protector, and your goal is to help the citizens of Seweka cleanse their lands of the forces of deception. The world of Seweka will have a procedurally generated story arc that will be driven by players interacting with NPCs and deciding which people to help and which to ignore. Will you rightly detect that someone is working towards deception, or will you accidentally leave innocent villagers to their demise?
Ultimately the forces of deception will attempt to take over the world and will fight until the death. During this period of time, once you’ve died in Seweka, you will not be granted entrance until either the forces of deception or the forces of honor have prevailed. Either way, your contributions will yield rewards and experience, allowing you another chance at saving the existing world or saving a new world after the existing world has been cleansed.
The world of Munsin is safe and meant to be where casual, relaxing gameplay takes place. It is the world where you have persistent progress being made. Seweka is a dangerous world where your gameplay choices will have lasting consequences, but experimentation is encouraged due to its resetting nature.
Initial Development Milestones
Part of my lack of progress in the past month was due to not being sure exactly what my next steps were. I found myself confronting design decisions I hadn’t made yet as I was beginning to think about the Character Select/Creation flow. In October, I had a dream of a single resetting world, but I kept having issues thinking about the gameplay flow. I also didn’t know how to develop it and keep it in a ship-often philosophy I’m hoping to approach this game development with. I want players in the game as soon as possible, but I only want them to be playing if there’s a compelling reason.
Having a single resetting world made it more difficult to imagine having community events around holidays, which I definitely wanted to have. If the resetting world’s timeline didn’t match the timeline of the real world, how could you bring Christmas or Halloween themes in and have it make any sense at all?
Thankfully, introducing a split-world design provides an interesting opportunity. If done right, I can reuse mechanics between both worlds but use them for different purposes. For example, gathering wood as a resource in Munsin will be directly used to craft various items. However, in Seweka, those resources will be turned into various NPCs to help them complete their quests. You can talk to these NPCs to learn what they’re trying to accomplish and what they need. As a player, you can decide if you’re more interested in participating in activities that will improve your character or whether you want to focus on activities to upgrade your home. As a game designer, when I improve the quality of life relating to resource gathering, multiple game systems are improved in the process.
Ultimately this flexibility also means that I can focus on developing the world of Munsin first. Once I have enough of the systems in place, I can begin working on Seweka and open the portal once enough of that world has been developed.
With all of that said, the initial goal is a game client and server that is deployed publicly for players to:
- Log in using Twitch
- Create a character, picking some appearance options and a name
- Be able to walk around the Islands in Seweka and chat with other users
While that may not seem like much, there’s quite a bit left for me to do to make this happen:
- Design localization system: I don’t plan on the game content being localized, as it’s going to be constantly being written. However, I would love to have the “prompts” such as button captions and help text be translatable to other languages.
- Work with an artist to design a modular character sprite system that supports my desires for customizability
- Finish work on distributing the world-update logic to scale to N servers, and world processing is automatically distributed and rebalanced if a server crashes.
- Add Create Character screen
- Test List Character/Select Existing character code (technically, it’s written, but I can’t create a character yet…)
- Design island procedural generation process. I have a fractal-style design envisioned that corresponds to the Honor-XP system of the game.
- Hopefully also have a custom-designed tileset for Munsin
- Design chat system. Inevitably debug more edge cases relating to text input and wrapping.
I haven’t written a lot of code since the last update. However, the work over the last couple of days has been important, albeit mostly behind the scenes.
Kludgine is built to be async from the ground-up. A few design decisions drastically impact the flexibility of code, and one is how sending a message from one component to another component must be handled. The current design is to spawn an async task that delivers the message asynchronously.
If this message causes a component to be removed from the view hierarchy, it might be triggered at some point where the runtime’s layout code is expecting a node to be present in the hierarchy because moments ago, it was previously known to exist. However, due to the nature of the async code, there are no such guarantees.
Today, I completed a somewhat far-reaching change that takes advantage of Rust’s error handling code to ensure that errors originating from an invalid Entity/Index reference will be gracefully handled. Technically there is an edge case if the view hierarchy is constantly being modified to generate an infinite loop in rare circumstances. The expected use case is not to be constantly altering the view components but rather alter the view based on changes to a known state. Ideally, a declarative JSX-style abstraction could eventually be created for Kludgine to mimic how React and other similar systems operate.
With a few other small changes, my code changes to work on the Character Select/Creation flow has been quite painless.
Given how much time I’m spending focusing on world-building and game design, I think a realistic goal for my next update will be towards the new year. In the meantime, I’m hoping to do a few streams on Twitch, and I’m hoping that by the time I have my next update, I’ll have some new visuals worth showing off.
I hope everyone is having a good, safe, and healthy December. Thank you to everyone for your continued support.