<aside> <img src="/icons/reorder_gray.svg" alt="/icons/reorder_gray.svg" width="40px" />

Navigation

</aside>

🏠 Home Page

Overview

Core Clicker Loop

Chests & Loot

Item Collection

Effectors

Upgrades

Skilltree & Prestige

Frenzy Mode

Debug/Helper component

💰 Monetization (Ads & IAP)

<aside> ⚡

Effectors are timed, rewarded-ad-gated multipliers: a HUD offer button spawns periodically, and tapping it plays a rewarded video that, on success, activates a temporary money/damage/chests-per-spawn boost.

</aside>

Effectors reuse the same ActiveEffectController timed-effect system Frenzy Mode is built on (see Frenzy Mode), keyed by each effector's own EffectId string instead of a hardcoded id.

How to add a new effector type

Offer flow

EffectorOfferController.TrySpawn() (called on a repeating Tween.DelayedCall loop) asks EffectorDatabase.GetRandomAvailable() for an effector that isn't already active. If one is available and no offer is currently up, it instantiates that effector's OfferButtonPrefab under offerContainer. If none is available (all active, or an offer is already showing), it just reschedules the same check for the next randomized interval - no offer means no visible failure, just silence until the next roll.

The offer button itself doesn't activate anything by tapping alone: EffectorOfferButtonBehavior.OnClicked calls AdsManager.ShowRewardBasedVideo, and only HandleAdResult(true) calls EffectorController.Activate(data). A declined or failed ad leaves the offer up, still counting down. Either the ad result or the countdown fillbar reaching zero calls onResolved, which destroys the offer and reschedules the next spawn - an offer that times out unclicked is simply lost, not re-offered immediately.

How to read an effector's state from code

How to trigger an effector programmatically

How to tune offer timing and duration

Scene setup