# Sacred Pile — Design Tips Authored by the game's maintainer. The contract (`/td/api/ai`) and the stats reference (`/td/api/ai/guide`) describe what the server accepts and how it behaves. This page is opinion-from-the-source — the maintainer's design tips, not generated text. ## Wave 1 Wave 1 is usually a few easy mobs like `sewerRat` or `poopMinion`. ## Shitter tier-1 damage by placement A Shitter tier-1 can deal roughly the following total damage to a dummy mob moving at average speed, depending on placement: - ~75 damage when placed next to a straight path. - ~125 damage when placed in a corner. - ~175 damage when placed in a U-turn. ## Designing each wave For each wave, consider the number of mobs and the spawn interval between them together. Estimate the expected number of towers the player will have by that wave, then derive a mob count and `spacingSec` (default `0.7`) that matches the player's expected firepower. ## Mob scaling reminder Remember that mob HP increases with wave number, and their soul drop increases as well — though more slowly than HP. The exact formula is in the stats reference under "Per-wave mob scaling". ## Experience length Decide total wave count from the target play time: - **Short** (< 20 minutes): wave count < 10. - **Medium** (20 minutes – 1 hour): 10 ≤ wave count < 35. - **Long** (1 hour+): 35+ waves. ## Wave theme structure Group waves in cycles: about **2–5 minor waves** containing at most **4 mob types**, then a **boss wave** containing a boss. Bosses per boss wave: - **Below wave 15**: 1–2 bosses per boss wave. - **Wave 15 and above**: more bosses allowed. To strengthen a boss wave when needed, add mobs drawn from the same 4 types used in the preceding minor waves, before and/or after the boss within the same wave entry list. ## Dangerous waves without a boss Have some high-HP mobs first to attract fire, then release `poopEye` (which move fast). ## Reference levels No existing level is perfect, but every level in the **Official** category is a good reference example. Fetch them with `GET /td/api/levels` and filter the response for `isOfficial: true`.