This was a challenging sprint for external reasons. So i got less than the previous sprint. Also most of the work was in improving, refactoring, cleaning, and some for the next chapter. So this chap is a bit more bare-bones than i’d have liked. But in truth i always like more.
General
New:
Save game is working! (This was a lot of work.) (Please note each release will probably break previous savegames)
A lot of preemptive work for next chapter. Not visible yet, sorry.
Added custom StoryManager.
Settings:
Basic key remapping. (Note this sucks atm so use carefully).
Optimization:
Re exported some optimized assets.
Attempt at disabling WPO on meshes.
Optimized data layers for objects “Outside” and Chap 01.
A ton of minor bugfixes, cleanups, and reorganization. Including plugins.
Added helper to set up character poses.
Art
New: Piano, plants x2, books, shelves, trashcan, small table.
New: a lot of art for the next chapter (not visible yet).
Improves to light.
Chapter 3
New: The whole chapter. New puzzle.
パラメーター adjustments.
Chapter 0, 1, and 2
Some tweaks on dialogs, puzzles, items, story flow.
------- Subsystems and plugins
Flashbacks
Improvements:
Fixed SetMax and SetMin default duration.
Dialogs
Story
Optimization:
Disable steps’ cameras while not active.
New:
flag to automatically modify the flashback progressively during dialog sequences.
Delegate for DataLayer changed.
Improvements:
Fading and step switching cycle. Cover blind for level switching (and others).
Changing steps, fading, and input enable/disable.
Data layer loading is not recursive now.
Inventory / Flags
Improved “Clear” function to Inventory and Flags.
Improved flags SetAll delegates.
Interactions
Improved delegate handling.
Improved rewarding, fade, and delegate cycle.
Added “IsReversed”. Default one depends on the StateNum.
Added “IsOneShot”. Adjusted “DisableWhileAnim”
Improved SetMobility, Locked.
Puzzle
Added ResetOnFail, OnReset, ResetTimer, and other reset utils.
This is the 1st pass of the 5th chapter (#04). It’s quite stub.
Sprint log:
Explanation and demo
------ Game
This was a very challenging sprint for external and internal reasons. Since this is the “last” chapter of the story, i decided to do many things differently. That includes changing the scheduling method. So it took way more than usual, but i think it was worth it. So everything is quite bare-bones and possibly confusing. Enjoy!
Important note: The button for erasing a save slot does not ask for confirmation! (That’s on TO-DO)
Important note: Compared to version 0.4.0.4, version 0.4.0.8 has less testing and a couple considerable changes, so it’s deemed more likely to have issues. Yet 0.4.0.8 fixes a couple really important features, and adds some interesting features. So i highly recommend trying 0.4.0.8. But if you were to have issues with that, please try 0.4.0.4.
General
New:
Data layer for outside houses is now more granular.
Added lights and puzzles to the outro.
Saved flags to the save.
Implemented light flicker based on sound. And a somewhat elaborated sound system.
Settings:
Improved remapping options.
New: Implemented movement and look sensitivity!
New: Beta: Implemented different audio submixes (channels), with different volumes and attenuations.
This was plenty of work and is still a new feature. Issues might arise.
This is some work after 0.4.0 . Life got busy and stuff happened. And it made sense to publish a new DevLog with the bits and pieces i’ve collected. Before starting the new sprint.
There were tons of things going on outside this project. Which made it really hard to make progress (if any progress at all).
Anyway, i tried my best, and decided to at least push to keep momentum. That proved to be hard and even impossible at times.
But i’ve managed to do a bunch of … stuff, which led to a lot of interesting improvements and additions.
So, i’m making this devlog to start the build with from a more stable point.
And also because a lot of time has passed and i feel it’d be nice if i give an update.
The build published won’t have any new content, but it will have all these improvements.
------ Sprint log:
Explanation and demo
------ Game
Important note:
General
New:
PORTED TO 5.4!! :party:
This was less work than expected. But still required an effort.
Intro logo.
Tweaks:
Rework character collider size.
A lot of rework and refactors.
Improved the docs all over the place.
Constness, TObjectPtr, likely.
Fixes:
Settings confirmation dialog.
Various fixes on stuff that wasn’t working.
パラメーター adjustments.
Settings
Reworked the whole settings ui:
Ton of work.
Ported a bunch of things to cpp.
Created base widgets for features and feature groups.
This is the 2nd pass of the chapter 03. It does not contain a lot of new content, but it does contain a good amount. Also, it contains a lot of improvement all around, including stability and performance. This was the 1st sprint after my forced pause, it was very challenging, but i’ve managed to keep progressing. So, here it is. Enjoy!
------ Sprint log:
Explanation and demo
------ Game
Important note:
If the game has problems, make sure to delete old config files.
This is the 2nd pass of the chapter 04. This is a HUGE milestone. Now all chapters contains 2 passes. This can be considered a release point. The Alpha version.
It contains some new content, and also quite a few improvements all around, and a TON of fixes.
This sprint was still very challenging, but i’ve managed to keep progressing. I’m actually quite happy with the amount of work that i’ve managed to achieve.
Thanks so much for everyone following the project and supporting me in one way or another!
My humble appreciation for you
So i really hope you enjoy this !
------ Sprint log:
Explanation and demo
------ Game
Important note:
If the game has problems, make sure to delete old config files.
General
NEW:
Moved to 5.5!!!
Added FBUtility editor widget to speed up tests…
Added MegaLights support.
Tweaks:
Improved the docs all over the place.
Constness, TObjectPtr, Branch prediction hints (Un/Likely). And other cleanups docs and fixes.
Improved build pipeline for windows.
Fixes:
Fixed settings menu on the intro not working well.
Fixed crash on hot-reload (yes, hot-reload).
Ghost pool flag is saved.
no パラメーター adjustments.
Settings
NEW:
Added new features.
MegaLights are working now
Dialog auto skip, with configurable time.
Configurable default flashback duration.
Configurable Interact drag.
Experimental: Batch ticks & Concurrent tick. (see engine docs).
This is the time between time. This sprint was done while i was preparing other things.
I’ve been organizing a couple of playtests, and gathering feedback.
I’m also preparing to tackle the next cycle of the game (a whole horizontal slice that could last another year and a half). So i’d like to have a good idea of where to go.
------ Sprint log:
Explanation and demo
------ Announcement/Important
Playtest
I’m looking for people who would like to playtest the game and give me feedback.
This is truly important for me at this point, and your feedback will shape what the game will become. Please contact me if you’re willing and able.
PLUGINS!
I’ve decided to publish my plugins already.
They are free and open source.
The links are below, under the title of each one.
I haven’t put time on the documentation (since i had other things to do), but the code it’s well documented and easy to understand.
I plan on improving the documentation, as well as cleaning them up as i go.
Then i want to publish them on Fab, though that proved to require more time than what i have available at the moment.
My wish is that someone finds them useful.
------ Game
General
NEW:
Started working on a hint system. That works with the card 00.
Done a lot of work. It’s working, but barely used.
Added on-screen icon while autosaving (top-right).
Improve:
Improved and tweaked some dialogs.
Enabled PSO precache and other PSO optimizations (less chance to get a stutter).
Lots of cleanup. Removed lots of unused stuff.
Improved savegame stuff, including startup flow.
Known issue:
Timer might reset when reloading from a savestate.
no パラメーター adjustments.
Settings
NEW:
Added confirmation before going back to menu and quitting.
Added feature flags for:
Dialog text, Hint (Card Intention),
Added work in progress story “Backlog”. Temporarily hosted in the settings window.
Improve:
Disabled the “speed” post shader by default.
Improved the feature flag for using savegame.
Art
NEW:
Redo the toilet.
Cleaned up some materials.
FIX:
Hover post process after DOF. Changes how it looks. I like it more and works better with the other post processes.
Re-exported more assets.
A bunch of missing dynamic shadows.
Drawer meshes.
Windows’ opacity.
Chapters
All:
Improved dialogs.
CH04:
Matches flow rework.
CH01:
Rejig some drawers.
------- Subsystems and plugins
All
PUBLISHED FIRST VERSION!!!
Added lgpl-3 license (work in progress).
Overall cleanup and improvement. Removed old stuff, tobjectptr, branch prediction, constness, crash prevention.
Flashbacks
Reworked flashback post process.
Added/improved some flashback material functions.
Dialogs
Plugin:
Added OnAdd delegate.
Story
Inventory / Flags
LifeDev:
Fix on inventory item change.
Plugin:
Added field for sound on item’s usage. Also implemented in the game but haven’t added any sound
Item.Description is now an array.
Allow the game to show multiple dialogs for very long descriptions.
Interactions (and animations)
LifeDev:
Puzzles: set the cubes to read the current letter on the hover.
Piano: show rotating error message on failure.
Fix stove’s hitbox.
Added a few basic features to support hints easily.
Plugin:
Wait for puzzle anims to finish before finishing the puzzle and trigger actions.
Fix ItemLogic world creation and BeginPlay.
Expose AInteract::HintTime to settings.
Big rework on Anim subsystem.
Now handles dynamic materials (float, vectors), custom primitive data (float, vector), material parameter collections (float, vectors), actor/component transform, and sound parameters (float) (e.g. metasound).
improved the code a lot.
improved delegates.
Added several features to support hints. (In a custom way).
Default config file.
Added UseSweep to AnimatorTrans.
Sounds
LifeDev:
Moved FB stuff out of generic AMusicMan into the game music man.
Utils
Lots of work on material functions. Add and improves.
NEW:
Added TWO new dither methods. DitherBayer and DitherHalfTone.
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.
Reworked how the walkman/tape/batteries interact/flow (a big work).
Tweaked some dialogs.
Attempt to add precomputed lights (when disabling lumen). Also, HLODS.
Tweaked arrangement of some objects. (Fixes some issues).
CH04:
CH03:
Improved interaction with door.
Improved piano puzzle.
CH02:
CH01:
CH00:
Experimented adding some messages on the flashback side.
------- Subsystems and plugins
All
Some plugins got updated.
Overall cleanup and improvement. Removed old stuff, tobjectptr, branch prediction, constness, crash prevention.
I’ve changed license to MIT!! (see explanation above)
Flashbacks
Fixed issue with FB values not changing at the correct speed between chapters.
Dialogs
New:
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).
Added Comment field to both dialogs and groups.
Some other fixes and improves.
Cleanup. Removed unused stuff.
Story
LifeDev:
Added FlagsFinish. Which allows to finish on certain flags.
Reworked some old steps to take advantage of new features, and also work better.
Generalized screen shakes for any step.
Other improves.
Plugin:
Protected against a really unlikely crash.
Inventory / Flags
LifeDev:
Added a bunch of “Auto flags”. For stuff happening in the game.
Many are the same from “Auto Dialogs”, but also: “Story.Step.Start.xxx”.
Interactions (and animations)
LifeDev:
Fixed issues with Puzzle finishing timings.
Added text for the current letter on word cube puzzle to help during flashbacks.
Added a new puzzle with books (not in the build yet).
Added a new puzzle with the shampoo bottle (not in the build yet).
Added RewardIntersTrigger, which points to other interacts to trigger as a result of the current interact trigger (yes, it makes sense to have it :))
Improved IsOneShot and DisableWhileAnim.
Added Interact ULockCondition. Unlocks the Interact using the new Eval subsystem. (Soon to be ported to the Interact Plugin).
Added overrideable method for Unlock. (To be ported as well).
Spot:
Added UseOrder to require items to be used in order.
Added UseStateInc to increment state on each usage.
Added light switches. This is mostly a test. only added to a couple of rooms.
Plugin:
Improved fading material handling.
Interact:
Fixes on Interact::DisableWhileAnim and !UseAnim.
Added HintCondition. Enables hint using the new Eval subsystem.
Added UseStateLoop to loop states when triggering past the last state.
Added SetActive to control whether it’s enabled to be interacted with.
Added SetState to control the current state. Also fixed an issue with the state count.
Moved Texts from Anim to base Interact.
Added OnHint.
A big rework on Puzzles to be Interacts.
removed DisableOnInter.
Added a Type Condition, that uses the new Eval subsystem to unlock/complete a puzzle.
Fixed sequence always locking.
Sounds
LifeDev:
Added a new song, that plays on the main menu when new game plus is available.
Fixed issue of music initialization on the main menu.
Fixed outro music.
Re-enable optimization (Auto manage attachment).
Fixed music playing twice.
Fixed music volume levels on intro/outro screens.
Utils
New:
Added JUtilsMath. Moved two functions there. Added a few more.
Added MathEval. A function that evaluates simple math expressions. Super useful.
Added ToggleDataLayers.
Important: Added Eval a subsystem for advanced math evaluations.
With many operators of my own.
Allows to use user defined variables.
Helps decouple the system and plugins.
Uses pure UE c++ code. No external dependency. Uses optimized UE classes. I can extend it in the future quite easily.
I’ve started experimenting with this to add conditions to the dialogs, interactions, and other things
Improves:
Improvement to the MsgBox class.
Buttons creations. Hide on done.
Pool
Fixed issue with reducing pool on ItemMax < Current.
Ensure pool empty on destroy.
Significance
Behave
NEW:
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.
Slime rancher emergent storytelling.
See this one. It’s loosely based on the first person’s talk. And the comment about Layered GOAP.
Also look at state tree. it can do very similar stuff. and it’s much cooler.