I've played your free titles since first Timore on GameJolt and I gotta say the gameplay and design improvement is visible and commendable - the game looks great and the gameplay is typical Timore and I wouldn't have it any other way. I've also decompiled the titles I've played and I gotta say that the code needs a similar renaissance. In your project you have 10 scripts for each task that do the same task in different parts of the map - for each sequence you have a separate script that enables/disables gameobjects and audiosources inside a Coroutine with different time offsets - Consider generalizing the script with arrays of time offsets and gameobjectsso you can use 1 script for each cutscene and for audio playback use animation events. The deterministic AI of Rufus also shows a big problem that just affects reusability and performance, like you have huge chains of yield return and everything is controlled by a buttload of booleans which you really don't need - use navmesh or simplify logic, it's gonna make life easier. As a general rule try to move away from laddered ifs and nested logic, work with the sequential execution of code. It's always a good idea to decouple code, so consider looking into OOP class relationships, inheritance, interfaces and general patterns that make use of them. This will help you write general reusable code and specialized code that derives from it, where you need it. Write with the mindset of 1 task -> 1 re-usable class.
Generalizing code & taking full advantage of OOP in unity just makes life a whole lot easier for you, write once use everywhere.