Updates for this month:
- Quests redesign
- New Quest UI
- Quest/Attention icons
- Quest giving NPCattos
- Fetch Quest (not just collect)
- UI pop-up when items added
- Keep track of collectables (currently only fish scales)
- Scene reference redesign
- Dynamic shop population (from file)
- New mechanics: Sit in hotsprings, Knock things off table
- New Scene: Inside the Northern Mountains
- Updated sound effects/ music, fade sound between scene loads
- Fixing animation intractability
- Started posting to social media
Quests Redesign – Scriptable objects, Auto IDs, Quest listener, Removal of most quest event calls, Quests are more global now (not only local)
The other day, at around 7pm in the evening, I had the spontaneous idea that the existing (and working) quest system I had written previously would be even cooler if it was driven by scriptable objects instead of events. And so, before remembering to push my current build to Git and save my existing progress (in case this turned out to be a terrible idea), I set to transitioning the quests to scriptable objects.
After about a week and no recent back up, I have a new quest system! Which luckily, in my opinion, is much cleaner and less confusing to use. All quests (including sub quest types) are now scriptable objects with auto generated IDs (I was creating them by hand before @_@ ). I also delved into Unity editor scripting for this.
Previously quests were saved in a ‘Local Quests’ gameobject in each scene if that quest had any intractability/changeability in that scene. Quests where identified by an ID that I had manually created and could be passed around to those who would be interacting with the quest. When something in the scene wanted to change a quest’s status, it would send an event update to the quest master with the quest’s ID and it’s new status (vector2). The quest master would then add/update that quest in it’s personal log and send out an event update with the change (vector2). Any object that relied on a quest to change, would listen for the quest master event updates, check if it was the quest ID they were waiting for and either react or not. This was limiting since the quest master could only ever know about quests from scenes the player had been through in that playthrough (I would save quest info to file for the UI, but that info was only a personal record of past quests and technically separate from the actual quests that exist in each scene). Lots of event calls! Lots of erroneous checking!
Now, a quest is a scriptable object. A base quest contains the quest’s title, description, scene in which it takes place (for waypoints), ID (auto-generated) status, if it is a quest chain parent (and if so what quests are it’s children), and if it is a quest chain child (and if so what is it’s quest parent). Child quests each after their own additional settings as well. The quest master now contains all of these quests and can access and quest at any time. Gameobjects in a scene still send out a quest update event call so that other systems that listen to all quests (not just one) can know when any quest is updated. But now, gameobjects that need to react to a change in quest status for any one specific quest, there is a quest listener. It does not rely on event calls, triggering when that quest’s status changes (or on other triggers such as scene load). And, by passing the quest scriptable object (instead of just an ID) a gameobject referencing that quest has access to all info about that quest without having to ask for it from the ‘Local Quests’ or quest master.
Quest UI – Parent/children quests, More structured
Although how the quests were being presented previously was only for testing/ displaying purposes really, now they are being displayed in a manner closer to what they might look like in the end. With the addition of quest chains in the new scriptable quest objects, children quest descriptions are now displayed under the title of their parent. This is still not the final form since on a mobile device the text is still quite small, but it is a step closer. The info to fill the quest UI on game load is also no longer grabed from the save file, but from the scriptable quest objects themselves, which allows for easier changing of titles/descriptions and overall accuracy.
Quest/Attention Icons – When an NPC has a quest you can turn into them, When new items are added to closet (above closet), Paw prints at a scene entrance if there is a quest to turn in in that scene
Lots of added visual feedback. NPCattos that you need to talk to in order to complete a quest now how ‘!’ above their heads. When the player buys, or otherwise gains, new cosmetic items, any place that the player can access their cosmetics to change, now has a visual indication that there is something new in their wardrobe (currently reusing the same ‘!’). If a quest takes place in a different scene (not the one the player is currently in), then ‘walking’ paw prints will appear at the entrance to the scene in which the quest can be completed in (not final visual). I don’t want to hand hold the player (encourage exploration, also the scenes are not that big) by giving the player a sparkling path that they can mindlessly follow to where a quest takes place, however, I will provide guidance if the quest takes place in a different area/scene, a small nudge in the right direction.
Quest giving NPCattos – NPC starting quests and indication that a NPC has a quest to give Fetch Quest (not just collect) – Refined to work with new systems
NPCattos can now initiate quests themselves and if they have a quest to give the player, they are highlighted to encourage the player to interact with them (currently highlighted blue). One of the first types of quests created was a fetch quest, different from a collect quest in that the player physically holds whatever they are fetching and returns it to a specific zone. However, it hasn’t been used since before the first quest system was created, so it has now been updated to fit (as well as cleaned up).
UI pop-up when items added to inventory/wardrobe Keep track of collectables (currently only fish scales)
Even more visual feedback! When things are collected, added, or removed from the players inventory/wardrobe a UI pop-up will display the item on the left hand side under the player’s book (‘+’, ‘-‘). If multiple at a time, a time multiplier may even pop up (‘x##’). This makes it much clearer that things are being added or removed from the player, especially cosmetic items, which are not visible without a closet/dresser.
At the moment, the currency (fish scales) is the only collectable object (other then objects for collection quests) but it can also be spent. A total collection status has been added for those who like to collect. Maybe more collectables will be added in the future.
Scene Reference Redesign – enums vs strings, hurrah for recursive graph traversal (so scene names can change but only need to edit in one place)
Unity references scenes by name or a number (which is that scenes position in a scene list). Previously I was saving and loading scenes by name, but when I changed a scene’s name, I would have to go through and change any references. Not the most ideal. Instead a scene enum was created. Scenes such as the Eastern Forest or Northern Mountains won’t change, but the actual scene name may change (ie v1, v2). The scene enum has these generic scene names and now all scene teleports/transitions/save file references this scene enum. The actual current name of the scene is saved in one place and can be returned given the appropriate scene enum.
Using these new scene enums, a scene web/graph was also created. This graph can be traversed to find the path from any one scene to any other scene (using recursion). It is used to find which scene entrance the player would need to take to get to the scene any of their active quests are in (to set up the paws mentioned earlier).
Dynamic shop population (from file)
No longer need to manually edit save files when new items are added to a shop (not in game), now the shop save files can react to these changes. Small quality of life improvement for myself.
New Mechanics
Sit in hotsprings
Knock things off table (cat style)
New Scene
The bridge between the Northern Mountain town and the tallest mountain peak that the player visits, the Northern Mountain Caves have finally be roughed out. Of course this is not the final design, but an initial implementation. Eire, following a color pallet of blues, purples, and greens, the mountains are dusty, musty, and filled with glowing overgrown mushrooms and tall cavern ceilings.
Updated sound effects/ music, fade sound between scene loads Fixing animation intractability
Updated some music and sound effects (not that any of them are final, but help give a sense of atmosphere and how things will/should feel). Sound also now fades between scene loads. No more jarring sound cuts. Some animations were updated, mainly enabling/disabling colliders during animation, so that things can’t be interacted with while animating (fish scales being collectable before they are done ‘exploding’, being able to talk to an NPCatto before they return to their original position and therefore interrupting them so they don’t go back at all).
Started posting to social media
And lastly, although I mentioned setting up social media accounts a couple months ago, I finally started posting (sort of and using my own accounts, not the ones I created 😅).
**Models, animations, and images are not final**