Let's talk about the gallery system.
The plan for this month was to develop the gallery system, but as usual, a few other things ended up getting in the way and were added into the plan.
For starters, I originally intended for the gallery to be something accessible through some interactable object in the world. Something like a diary, reminiscing on the bed, or something among those lines. This approach would've made use of the dialogue system, and as such it would've been simple enough to implement the gateway to the system. However, there were a few inconveniences with this approach, and I ultimately ended up changing my mind and decided to instead have it be a button that would be accessible from the planned in-game menu, which aside from not having the inconveniences the other approach had, it also had the added benefit of allowing players to access the gallery at any time.
Keep in mind I'm talking about the in-game menu, not to be confused with the main menu, which is the one you start playing from when opening the game. The issue here being that the in-game menu didn't quite exist yet, so development stopped on the gallery system, and instead it moved on to making the menu so I could then add the gallery into it.
Now, this one was an interesting one, other than the main menu, which is an incredibly simple system, there aren't any other interactable interfaces in the game, so this was something quite new for me. The in-game menu has sub-menus, confirmation prompts, etc, which is a level of depth that I hadn't worked with before, so there was a lot of trial and error, and a lot of things had to be learned for this to work as I hoping it would.
The menu is now functional, and with that, I could now properly continue developing the gallery system. Which I'll be addressing as the memory system from now on. This is where things became even more interesting and complicated.
As a reminder, activities are the chains of events you find in areas. The lifeguard events are part of the lifeguard activity. The events from bathing at the bathhouse are part of the bathhouse bathing activity.
For the memory system there were many things I wanted to do. For starters, the overall experience. Generally the galleries of the games in this genre are either a set of pages with every event in the game as a button, or it will instead be a room that is flooded with tons of interactable characters, each with an event they can play. I have never found either of those approaches to be particularly pleasing to the eye.
I wanted to try my hand at making something better, so here the majority of the different events and all of their levels are instead split into their respective activities, and there is an interactable entity for each one of those activities inside of the memory area. This results in roughly 10 main interactable activity entities, which looks a lot cleaner.
Now, as to what happens when you interact with these activity entities, this is where the system got even more complicated. However, there was one more thing that had to be added to the equation.
There were three main features I wanted to have in the memory system:
Three different replay modes to view previous events.
If you just want to see the CGs of an event without replaying the event, you can do so with the CG viewer.
If you want a more in depth experience in which you can replay a memory in it's entirety with its CG, dialogue, and its routines, you can do so with the event memory replay function.
And then there's the activity memory replay feature. If you want the full experience of an activity and all of it's events by being able to play through it yourself again in it's entirety, you can do so with activity memory replay function.
The CG viewer feature was the simplest one implement. The CGs for this feature are built and rendered in-engine in a similar way to how they are for normal events, which results in them being very straight-forward and simple to implement and modify.
The event memory replay function was also fairly simple, but it had a few minor complications. When using this feature Hana is brought to the POI from that event, and then the event is played as it normally would. I've made this function work in a way that is compatible with the majority of events without any issue, the only exceptions are some events that have their own routines. Some events with routines work just fine, but some others have required some minor compatibility tweaks to their routines for them to work with the memory system and be able to deliver a smooth experience.
The activity memory replay feature is the most complicated one. This one starts in the same way the event memory replay does, and there isn't much issue there. The issues started with some activities that start, or end with routines, which required more extensive compatibility changes. Then the other big issue was making everything be able to play as the level of the memory that was chosen. Most of the logic in the game reads Hana's lewdness level, but for this systems to work well, I had to give all of that logic the ability to also be able to read and play according to the lewdness level of the current memory whenever a memory is being viewed, which meant making some extensive tweaks and additions to code throughout the entire game.
And with these three replay modes, things become even more complicated, again.
Each activity entity had to be capable of holding multiple different events, with each of those events having memories for each level, and on top of that, all of this had to be compatible with three different replay modes. So there was a lot to do in order to be able to fit all of this into a single activity entity.
When interacting with one of the activity entities, a menu appears in which you can choose between event memories or activity memories. If you choose event memories, you are then taken into a sub-menu in which you choose the specific event you want from the activity. After you choose an event, you are then taken to a level menu with the list of levels for that event. When you choose a level, there is a smaller menu that lets you choose between the memory replay feature, or the CG viewer.
If you choose the activity memory option, you will be taken directly to the level menu, and similar to the event memory mode, when you choose a level, you will be able to choose to either replay the activity, or to view the CGs.
The CGs shown in the activity memory mode are all of the CGs from the different events for that activity, while the ones in the event memory mode are only the ones from the specific event you chose.
One of the major complication of the memory system was the many layers and menus it has.
There is an initial mode menu, then a sub-menu where you choose an event, then the level menu which is a sub-menu of the sub-menu of the initial mode menu, then when you choose a level there's another mode menu which is a sub menu of the menu of... you get the point. There is a lot of layers.
The good thing is that it's quite intuitive despite the many layers. So, intuitive, clean, and it accomplished everything I had in mind. Nice.
That explains the basics of the menus and navigation in the memory system. There's another part of the system that I think is a fun subject, which is the memories themselves.
Think of them as small boxes of information that hold everything relevant to a memory, and then think of the rest of the memory system as something made around extracting the information from these memories.
They contain all of the information needed for the gameplay when replaying events or activities, such as the level of the memory, clothing, the POI the memory takes place in, the day time needed for that event, location, some compatibility things, and many more things. They also contain the CGs needed for the CG viewer, and the dialogue stuff for the event memory replay.
Another cool thing is that the level menu isn't hard coded, instead it generates itself based on a few parameters, such as how many levels there are for an event, how many have been unlocked by the player, etc, which has many benefits, such as performance, and making it work anywhere seamlessly. There's also a couple nice visual features I added to it, such as being able to show the descriptions of the unlocked memories, and when you hover over a memory, it will display a thumbnail with a preview of the CG for that memory. Both of these things are information that is contained inside of each memory, which the level menu then extracts, and this being done this way instead of being ingrained inside of a menu, which again, has many benefits.
Anyhow, overall the memory system is functionally complete, and right now all that is left to do is implement a few more compatibility tweaks to a few routines and finish adding some information details to the memories, such as descriptions and thumbnails, as most of them are still full of placeholders.
This progress log feels like a mess. There are so many details and complications with this system that I truly did not know where to start. This is about half of everything I would have liked to have in this post about the development and details of the memory system, as there were other interesting things added to it for additional functionality, better performance, etc. But, again, I don't know where to start with all of it, so I'll just be ending the post here. Besides, it's already quite long as it is. I'm sure I'll talk more about the system in other upcoming posts though.
Thank you for supporting the development of Hana's Exposure!
Flimsy
2022-12-21 15:37:13 +0000 UTCKoda Itaru
2022-12-19 17:43:41 +0000 UTCFlimsy
2022-12-19 17:13:59 +0000 UTCBarricado
2022-12-19 16:34:35 +0000 UTC