Today’s push was all about tightening the RPG loop and dialing up the atmosphere. I reworked how quest rewards are delivered (no more instant payouts) and built a dynamic “whisper” audio system that grows louder as you fix fence posts—then snaps to total silence the moment you finish. It’s a small set of changes that made the game feel more intentional and eerie.
Previously, quests paid out the moment the objective flipped to Completed. That short-circuited the loop I want: finish the task, return to the quest giver, and then get paid. I added a lightweight currency manager and moved reward logic from the quest system into the NPC interaction flow.
A tiny singleton tracks the player’s coins, updates the UI, and persists across scenes. Nothing fancy—just enough to support shops later.
Instead of granting coins in QuestManager.CompleteQuest(), the quest giver now handles it. When you talk to them, they look for any completed parent quest that hasn’t been rewarded yet, pay out once, and show completion dialogue.
On the dialogue side, I added a quick gate: if any parent quest is completed but not rewarded, the NPC calls TryGiveQuestReward() and plays the “quest complete” lines. Talk again and you won’t get double-paid because the quest ID is recorded.
Result: objectives now complete quietly, the hand-in happens face-to-face with the NPC, UI updates immediately, and the flow leaves room for future item/XP rewards and shop spending.
To make the fence quest feel unsettling, I added an ambient whisper loop controlled by an AnimalWhisperManager. It scales volume based on how many fence posts you’ve repaired. Early on it’s barely there; by the last few posts it’s pressing against you.
The first pass bumped volume instantly each time a post was placed—audible, but robotic. I switched to a coroutine that lerps from the old level to the new target level over ~1.5s to sell the sense of “time passing” rather than “parameter changed.”
I experimented with fancier curves but they dipped near the end and ruined the build-up. A simple 0→1 linear curve delivered the constant escalation I wanted.
The big mood shift comes on the last post: instead of a polite fade, the world slams to silence. No tail, no reverb—just gone. It’s jarring (on purpose) and makes players pause.
Combined with despawning the animals on completion, the moment lands with a weird finality that fits Cowpocalypse’s vibe.
With turn-ins and currency behaving, the next steps are straightforward: wire up a basic shop that checks SpendCoins(), start handing out items alongside coins, and keep leaning into small audio stingers to punctuate quest beats.