SamuKata
SubjugationLeague
SubjugationLeague

patreon


A programing update

As mentioned in our response concerning Unity, this is an ambitious project.

For any of you familiar with me, I have no issue talking technical stuff and making walls of text, but I’ll try to stay on topic.

This technical update will be about the first key system for our project, World Navigation.

World navigation focuses on 2 major things:

1st the ability to easily create and describe the world,

and 2nd being able to easily use said world with other game systems.

Specifically, World creation means:

being able to make maps,

add new locations players can go to to

Adding rooms or areas to locations,

And most importantly, being able to change and modify the game world, such as by describing different versions of the room.

If we can do all of the above, then the only challenge for adding new locations and areas to the project will just be in creating the art assets.

As for using the game world with other systems, the reason we started with the world system is because it’s going to be our primary data container to represent world data. Due to our plans for missions and their complexity, having missions or some other system try to manage game state variables will start to become very cumbersome. Why track game state and data, when you can just hand it off to something else? Think of Bethesda, why worry about a vendor’s inventory system, when you can just shove it all in a chest hidden under the map? For us, that would be, why manage mission items or characters, when we can just toss them into a virtual world to exist?

So the first thing was to create custom data types. That’s easy enough. But the focus of this update is what I call the “World Manager” (currently on prototype #3)

I keep showing the same image just to help indicate a subject change.

Rooms and locations don’t need to really know what rooms they are connected to. However, when you are dealing with a lot of complexity or managing a project, organization is important. I have found that a lot of programming, the process of turning concepts from just idea to something shareable, starts with describing the idea. Organizing is one way to describe an idea, how things relate to each other says a lot about them. Why shove all the room images into a generic ‘backgrounds’ folder, when it may be more handy to organize them by location and room? It may or may not help you with your work, but it can help make it understandable, especially so if someone else has to learn about your system.

This is the case with this project. I’m Saki Sliz, and I’m helping Romen Jack by being their main programmer. As I design and get things working, I ideally want to get things to a state where I can hand off everything to Romen Jack who is the main content provider for the project. Like most programmers, I want to make a system that works well, and is nice to use. If I want to ‘hand off’ everything to RJ, I better make sure to do great documentation and tutorials… if it were code. However, an important part of a project’s design is its organization, as I was hinting at previously. Something as simple as, sticking all the rooms that belong to a location into a folder specific to that location.

The moment I start organizing the game’s data folder, that’s basically free information the game objects could use. Instead of telling a location what rooms are available, the location can figure it out by scanning its folder for assets. Rooms can figure out what location they belong to, and ask that location what rooms are available to navigate to. But the moment I start implementing this code means that RJ needs to make files to a very specific format, else it could crash the code.

Right now datatypes for rooms and locations and maps are rather empty, just placeholders. In the preview image, the black spot of the main editor window “Word Manager V3” the blank spot is where all the room data goes, not currently inspectable in this demonstration. All this data may not be as easy to fill as automatically detecting certain files. So rather than technical documentation, I figure for most art focused dev, a dedicated tool would be better!

Right now the World Manager tool has the following major features.

A context sensitive navigation tree designed to handle a large amount of asset creation. Everytime you select something, such as a map, the next list updates, such as showing locations only belonging to that map.

A basic selection inspector for simply creating, renaming, saving, and deleting assets as we map out the world, making it much easier than navigating the folder menus, manually creating the asset and folders and connecting the assets and not having to double check if they are configured right.

The world manager also interfaces with other game assets, such as with Naninovel. We use Naninovel as our script interpreter, with many parallels to Ren’Py, to give RJ the easiest and best experience creating content and scenes for the project. The navigation system, works with Naninovel through the use of custom commands, such as the move to command, as shown below.

Again, as part of the design to make things easier for RJ and overall game production pipeline, the Word Manager hooks into the Naninovel system by providing autocomplete functionality to the command, as shown above.

It’s features like this that make it so that RJ doesn’t have to understand the game’s design philosophy in order to know how to use it that will help make this project more manageable and enjoyable to work on, to ensure the project's success.

Remaining work for the World Manager and Navigation System includes:

Adding more data to the location and room datatypes as the need arises,

Finish the navigation system (connecting the UI controls with the room or map data)

Adding the Interactable system V3 for items and room navigation

Add commands for interactables and verify player inventory functionality.

After this, I move onto the next big task, the Action System, responsible for code injection so that story events, random encounters, Character AI and other mechanics can either override basic navigation or be affected as players navigate the world.

-Sliz


More Creators