This is the time between time. This sprint i focused on polish while i was doing other stuff, like waiting for feedback, and other real life things that required my attention. I tried to work a bit on marketing, narrative, and design, but without much progress (though trying is as success, and i did a lot of research). I still wanted to keep progressing with the game, and programming makes me happy, so i did some polish while things settled and i was a bit more in a place to continue with the regular sprints. So the new sprint (the one after this devlog) is the start of the 3rd cycle! Yay! Super amazing. So i hope you get excited about this devlog and the upcoming progress :) As always thanks SO SO much for your help and support <3.
—— Sprint log:
Explanation and demo
—— Announcement/Important
Playtest
Play-tests are still open. If you want to help me with your feedback, please contact me :)
New plugin for emergent behavior
I've created a new plugin for emergent behavior gameplay! Read more down below on its section ("Behave").
Plugin now use the MIT license!
So, this is an important change.
I rather LGPL3, but i've decided to change to MIT.
The major reason i prefer LGPL is that it incites people to also release the modifications of the plugin back to the community (AFAIK). That's actually quite important to me. Unfortunately MIT does not enforce that.
The downside with LGPL is that i've had the misfortune to know people who did not understand much about licenses and only used MIT due to being simple to understand.
The only point that i find reasonable to not enforce LGPL though, is a clause that states that you either need to release a relinkable object file or use a dll. A clause that i do not care *at all*.
But since i know how unlikely is that someone will actually take the time to evaluate a license (with a lawyer maybe), an edited lgpl is not useful.
So in the hope that more people can use the plugins and feel at peace, i've decided to use a license that's easy to understand and permissive enough.
I'm sure the people that would like to contribute will do it regardless.
—— Game
General
NEW:
Implemented a few modes: New game plus, Kiosk (for expos), and Demo (demo build).
Just a stub at the moment.
Improve:
Some cleanups and general improves.
Improvements to the GhostPool management.
Improvements to handling the chapter flow, and improved handling the end of the story.
Fixed and improved subsystems and manager initialization flow. For great stability and determinism! Fixes some issues with feature flags.
Moved the outro stats to its own screen.
Improved packaging flow. Changed a few things to work with the Feature flag system, so it’s set automatically to the correct group (file saves, test data layer, etc.).
Known issue:
The boxers have some weird color on a side due to a bug in ue.
Settings
NEW:
Show current foxy value.
Ability to tweak foxy value on new game plus.
Ability to change blur amount.
Ability to change the ui scale!
Ability to invert Y coords on camera movement B)
Attempt to add a debug panel.
Added (experimental) flag to disable saving game during runtime.
Improve:
Reworked saving
Added a saving icon!
Improved loading and saving.
Improved saving handling.
Added experimental version tag to the save game.
Fixed saving settings (flags and feats) when changed on the intro menu.
Fixed loading settings and feats on game start.
Ensure saving new feature flags.
Art
NEW:
Light switches (1 base with 3 options).
(Shampoo/conditioner) Bottles. Might not be on the build.
Improve:
Generalized two ui buttons and replaced them on a bunch of places.
Improved the MsgBox.
Improved dialog aesthetic. Colors and such.
Fixed issue with pop-in animation and different line counts.
Basin position.
Improved the dithering effect and used it in a few more places. Now everything looks a bit more coherent and nicer.
Major rework to the dialogs. More data driven. Easier to add tons of them without the need to code. (Inspired by the GDC talk for Firewatch and Steam’s L4D/Portal/Etc.)
This inspired the additional features for ‘dialog conditions’.
To support this i’ve also added a bunch of automatic (generic) dialog events, as well as flag tracking.
Still experimental, i’m confident i broke something, and i haven’t added many dialogs just yet. Still some technical features missing.
“AutoDialogs”: Item.Look, Item.Fail (not usable, not ready, bad target, no target), Item.Use, Inter.Trigger, Inter.Look, Inter.Unlock, Inter.UseItem, Inter.State, Inter.Activate.
Most of these are also automatic flags. So now i can (and super easily) have logic on the dialog, puzzles, and interaction; to check for any of the above things. Via the shiny Eval subsystem and conditions (or directly via flags).
Finally removed all \n from items and dialogs. In favor of multiline text fields. Small performance gain.
Plugin:
Renamed sequences to groups.
Added a Condition field to dialogs and groups. To be evaluated by the new and shiny Eval subsystem.
Ditched changing the behavior depending on row names’ postfixes.
Added group types. Sequence, Random, Match (pick first matching condition), Pick Loop (pick one using a condition, loop around), Pick Clamp (like PickLoop but clamp instead).
New plugin for emergent behavior. It’s pretty nice. Aims to allow mechanics like the Sims, or Slime rancher, (Or FEAR/TombRaider/Others).
I’ve made this after watching the Slime rancher and sims talk. So it’s a bit inspired by it (thanks so much GDC for the talks). But the design is my own idea. Later on, i’ve found about GOAP and StateTrees and i’ve included some of it. It can behave as any of those.
This plugin is on a beta stage (experimental).
The architecture/design is pretty stub/prototype. And has not undergone much optimization.
I’m still testing whether it’s going to be useful for this project or not. It’s quite possible i won’t add it, since it detracts a bit from the current scope, i don’t really feel the emergent behavior mechanic fits with the feeling/idea i want to transmit, and could add a ton of extra work for no real value (real value would be a mechanic that reinforces the narrative and tells the story). In any case i’m pretty sure i’ll add some sort of emergent narrative in some way. The work with the Dialog/Flags/Eval systems already provides a great deal of power for emergent narrative.
I haven’t published it just yet. But i plan to do so sometime soon (when i get some free time, energy, and motivation). Even though it’s beta and the code quite not up to my standards, i will publish it anyway in case someone wants to try it out, or help with, or have fun, or learn.
In any case i think i might just move to use StateTrees by UE. (which i discovered after doing this plugin). I think it’s much more mature, and also a good skill to learn for my professional career. Though i’m certain that being able to create my own GOAP/StateTree improves my skills more (and require more skills) than knowing how to use a StateTree. So i think of this was a great exercise and learning experience for me. Though maybe i use it in another project just for fun, specially if i discover it’s more flexible or performant than state trees. One cool thing about this plugin is that it’s compatible with the Significance subsystem, planning happens on a background thread, And the tree is totally dynamic at runtime.