Client-Side Enemy Mechanics
While enemy behavior runs on the server (see ECS System), three client controllers handle rendering, input, and local feedback.
Enemy Controller
EnemyController receives network sync data and renders enemy models.
Responsibilities
- Model Management — Clones enemy models from
ReplicatedStoragetemplates on spawn - Position Interpolation — Lerp with 0.15 alpha for smooth movement between server updates
- Visibility Tracking — Checks every 0.1s which enemies the player can see (fires to server for Weeping Angel mechanic)
- Animation — Drives Quirkymal walk/idle animations on Lost Quirkymal entities
- Petal Colors — Applies session-specific color palette to FlowerTrap meshes
Network Events
| Remote | Purpose |
|---|---|
entitySpawned | Clone model, register entity |
entityUpdate | Position/state sync (lerp target) |
entityStateChange | Trigger animation transitions |
entityDespawned | Destroy model, cleanup |
Root Snare Controller
RootSnareController handles client-side proximity detection and movement restriction.
Mechanics
| Parameter | Value |
|---|---|
| Trigger radius | 3 studs |
| Tether radius | 5 studs |
| Snare duration | 5 seconds |
Behavior
- Player walks within 3 studs → snare triggers
WalkSpeedreduced to 0 (immobilized)- If player somehow moves beyond 5 studs, velocity cancelled and pulled back
- After 5 seconds, speed restored
- "Already triggered" tracking prevents double-activation per snare instance
FlowerTrap Drag Controller
FlowerTrapDragController manages the escape mechanic when grabbed by a FlowerTrap.
State Atoms
| Atom | Type | Purpose |
|---|---|---|
dragActiveAtom | boolean | Whether drag is in progress |
dragProgressAtom | number | 0-1 escape progress |
dragDrainRateAtom | number | How fast progress drains |
Input
- Player mashes input to fill progress bar
- Max 15 inputs per second (throttled to prevent macro abuse)
- Progress drains continuously at
dragDrainRate - Local drain prediction for responsive feel, synced to server
UI
The DragBarController UI renders a progress bar with red → yellow → green gradient. At 1.0 progress, the player escapes and the FlowerTrap enters cooldown.