Full notes
Full Dungeon Flop update
Read the full published notes in a cleaner layout. The original post stays linked below.
What changed
- Gameplay
- Balance
- UI and audio
- Fixes
I woke up feeling great. feels good man dot jpeg to the max, so i dont know if its a manic upswing or what, but i'mma going to ride this feeling out and try to be as productive as i can today. I'm refining the direct control features today. That means going back and re-evaluating my ability system. Which is now ability systemSSSSSSS because i hate my life so i refactored all the things. Now, instead of 1 big old honking script, i got like 7 tiny scripts. Single Responsibility Principle is a rule that gets shunted when you are developing fast and trying to get stuff done. So much work left to do.
Today is bike day, so i get to ride with the local bicycle club. No, i dont wear spandex; if you saw me on my bike you would think im homeless AF. Actually, thats a given most of the time. Got some risotto rice, couscous, chick peas and other things. It came to 40.40. Cool number, bad for my wallet. I'm hoping to release this for like, maybe 5 bucks a pop, maybe 10. Its just so expensive out there, and money is a metric for sure, but i actually want people to play my game. So i dont know, im not really good at business, never really was good at it. I think i just dont want to screw people over, and thats what it seems to be most of the time. Here, at least with this, its a thing i made with my own 2 hands and i dont feel so bad about asking for a few bucks for my hard work.
well, anyways, let me hand it over to GPT to summarize todays work. ---
High-Level Goal Clarified
You solidified the direction for Direct Control (DC) vs Tactical/Automatic ability execution:
Automatic mode: abilities self-fire when ready and valid
Direct Control mode: abilities listen for player input and resolve targets differently
Key insight: triggering and targeting must be decoupled from the ability itself
Major Architectural Decisions
1. Ability execution was split into policies
You moved away from monolithic [c]AbilityBase.Update()[/c] logic and introduced:
Trigger Policies
[c]IAbilityTriggerPolicy[/c]
[c]AutoTriggerPolicy[/c]
[c]ManualTriggerPolicy[/c]
Targeting Policies
[c]IAbilityTargetingPolicy[/c]
[c]AutoTargetingPolicy[/c]
[c]DirectControlTargetingPolicy[/c]
[c]CachedTargetingPolicy[/c] (scan + hysteresis)
This cleanly separates:
When an ability fires
How a target is chosen
Why an ability activates
This directly unblocks DC (Direct Control) input later without touching ability internals.
2. AbilityBase was reduced to orchestration
[c]AbilityBase[/c] now:
Owns cooldown state
Owns policies (trigger + targeting)
Owns lifecycle ([c]OnAdd[/c], [c]OnRemove[/c])
Delegates execution via [c]Fire()[/c]
It no longer:
Decides when to fire automatically
Contains targeting logic
Owns FX or stat mutation internals
3. FX and SFX were extracted
You introduced:
AbilityFXController
Which now owns:
PFX / SFX IDs
Attach resolution
Opacity control
Playback responsibility
[c]AbilityBase[/c] only calls:
fx.PlayActivateFX(); fx.PlayHitFX(...); fx.PlayReadyFX();
This removed a huge amount of clutter and eliminated Unity-specific FX knowledge from the core ability logic.
4. Passive stat mutation was identified as misplaced
You correctly noticed:
[c]ApplyPassiveBonuses()[/c] / [c]RemovePassiveBonuses()[/c] do not belong in AbilityBase
They caused type errors and architectural friction
Solution direction:
Extracted into [c] AbilityPassiveController [/c] (plain C#)
AbilityBase now declares bonuses but does not mutate stats directly
This aligns passives with:
equipment
auras
debuffs
future DC modifiers
5. Fire() flow was corrected
You identified and fixed that:
Fire()
must:
Delegate FX to [c]AbilityFXController[/c]
Not directly call old PFX/SFX helpers
Remain policy-agnostic
This finalized the separation: Trigger → Target → Activate → FX → Cooldown
Net Result
You now have:
A policy-driven ability system
DC-ready targeting hooks
Automatic vs manual execution without branching
FX, targeting, triggering, and passives cleanly separated
AbilityBase reduced to a coordinator instead of a god object
This is a foundational refactor, not a feature day — and it sets you up to add Direct Control input cleanly later without reopening this file again.
Source
Changelog.gg summarizes and formats this update. How we read updates.
