{
  "name": "ramparts",
  "kind": "registry",
  "title": "Ramparts",
  "description": "A tower defense roguelike: build towers, soldiers and spells against waves on a lit 3D diorama, inside a run of three acts and a final citadel. Draft a war table of up to six towers with boons and relics along a branching map of battles, elites, shops, events, forges and camps, then come back with renown, new commanders and ascensions.",
  "version": "1.0.0",
  "icon": {
    "tile": {
      "svg": "M2 15V4.5h2.6v2h2V4.5h2.8v2h2V4.5H14V15H9.6v-3.2a1.6 1.6 0 0 0-3.2 0V15z",
      "bg": "indigo"
    }
  },
  "author": "pal",
  "spec": "github:zcag/pal/extensions/ramparts@v0.14.0",
  "source": "https://github.com/zcag/pal-games/tree/HEAD/ramparts",
  "commit": "18815019eacd8503442c66b50a839bbe14007510",
  "manifest": {
    "name": "ramparts",
    "title": "Ramparts",
    "description": "A tower defense roguelike: build towers, soldiers and spells against waves on a lit 3D diorama, inside a run of three acts and a final citadel. Draft a war table of up to six towers with boons and relics along a branching map of battles, elites, shops, events, forges and camps, then come back with renown, new commanders and ascensions.",
    "version": "1.0.0",
    "icon": {
      "tile": {
        "svg": "M2 15V4.5h2.6v2h2V4.5h2.8v2h2V4.5H14V15H9.6v-3.2a1.6 1.6 0 0 0-3.2 0V15z",
        "bg": "indigo"
      }
    },
    "author": "pal",
    "repo": "bundled",
    "license": "MIT",
    "keywords": [
      "tower defense",
      "roguelike",
      "strategy",
      "deckbuilder"
    ],
    "settings": [
      {
        "id": "volume",
        "label": "Volume",
        "kind": "number",
        "description": "How loud the game is, music and effects together; M in the game turns it off.",
        "min": 0,
        "max": 100,
        "step": 5,
        "unit": "%",
        "slider": true,
        "default": 80
      },
      {
        "id": "music",
        "label": "Music",
        "kind": "number",
        "description": "The music that swells with the fight.",
        "min": 0,
        "max": 100,
        "step": 5,
        "unit": "%",
        "slider": true,
        "default": 70
      },
      {
        "id": "effects",
        "label": "Effects",
        "kind": "number",
        "description": "Arrows, blasts, coins and the rest.",
        "min": 0,
        "max": 100,
        "step": 5,
        "unit": "%",
        "slider": true,
        "default": 80
      }
    ],
    "sync": {
      "profile": {
        "fields": {
          "version": "max",
          "renown": "sum",
          "level": "max",
          "track": "max",
          "unlocked": {
            "fields": {
              "towers": "union",
              "commanders": "union",
              "relics": "union",
              "events": "union",
              "titles": "union"
            }
          },
          "perks": {
            "each": "latest"
          },
          "ascension": {
            "each": "max"
          },
          "blessingRare": {
            "each": "latest"
          },
          "reachedAct3": "latest",
          "furthest": "latest",
          "codex": {
            "fields": {
              "towers": {
                "each": {
                  "fields": {
                    "built": "sum",
                    "kills": "sum",
                    "damage": "sum",
                    "topWins": "sum",
                    "specs": "union"
                  }
                }
              },
              "boons": {
                "each": {
                  "fields": {
                    "seen": "sum",
                    "taken": "sum",
                    "tempered": "sum"
                  }
                }
              },
              "relics": {
                "each": {
                  "fields": {
                    "seen": "sum",
                    "taken": "sum",
                    "wins": "sum"
                  }
                }
              },
              "enemies": {
                "each": {
                  "fields": {
                    "met": "sum",
                    "killed": "sum",
                    "leaked": "sum",
                    "worstLeak": "max"
                  }
                }
              },
              "bosses": {
                "each": {
                  "fields": {
                    "met": "sum",
                    "defeated": "sum",
                    "fastest": "latest",
                    "ascBeaten": "max"
                  }
                }
              },
              "events": {
                "each": {
                  "fields": {
                    "seen": "sum",
                    "choices": "union"
                  }
                }
              },
              "commanders": {
                "each": {
                  "fields": {
                    "runs": "sum",
                    "wins": "sum",
                    "best": "max",
                    "towers": {
                      "each": "sum"
                    }
                  }
                }
              }
            }
          },
          "history": "union",
          "totals": {
            "fields": {
              "runs": "sum",
              "wins": "sum",
              "streak": "latest",
              "bestStreak": "max",
              "fastestWin": "latest",
              "mostLivesWin": "max"
            }
          },
          "tutorial": {
            "each": "latest"
          },
          "lastCommander": "latest",
          "settings": {
            "each": "latest"
          }
        }
      },
      "run": "latest",
      "settings": {
        "each": "latest"
      },
      "scene": "local"
    },
    "leaderboards": [
      {
        "id": "ascension",
        "title": "Highest ascension won",
        "order": "desc",
        "format": "points",
        "min": 0,
        "max": 10
      }
    ],
    "store": {
      "tagline": "Hold the road, then the next act, then the citadel",
      "category": "fun",
      "play": true,
      "platforms": [
        "macos",
        "linux"
      ],
      "actions": [
        {
          "title": "Build and upgrade",
          "description": "Click a pad for the build ring, or move between pads with the arrows or Tab and press 1-6; U upgrades, X sells (twice), T changes the target.",
          "keys": "1, 2, 3, 4, 5, 6"
        },
        {
          "title": "Next wave",
          "description": "Starts the first wave, then calls the next one early for gold.",
          "keys": "space"
        },
        {
          "title": "Commander spells",
          "description": "Aim with the mouse or the arrows, Enter casts, Backspace cancels.",
          "keys": "q, w"
        },
        {
          "title": "War supplies",
          "keys": "e, d"
        },
        {
          "title": "Show every range",
          "description": "Hold Alt.",
          "keys": "alt"
        },
        {
          "title": "Battle speed",
          "description": "1x, 2x or 3x.",
          "keys": "f"
        },
        {
          "title": "Pause or carry on",
          "keys": "p"
        },
        {
          "title": "Back",
          "description": "Closes what is open, cancels an aim, leaves a shop.",
          "keys": "backspace"
        },
        {
          "title": "War table and map zoom",
          "description": "Outside a battle: V shows your towers, boons and relics; Z zooms the run map.",
          "keys": "v, z"
        },
        {
          "title": "Sound on or off",
          "keys": "m"
        }
      ],
      "features": [
        "Twelve towers with distinct jobs, each going to level three and then one of two specialisations; soldiers that block the road and two commander spells",
        "Fifteen enemy roles with counters: armour, wards, shields, flyers, stealth, healers, splitters; seven bosses with their own tricks, from a burrowing wyrm to a dragon that takes to the air",
        "Synergies you find by seeing them: frost then shatter, oil then fire, marks then crits; fire and ice cancel",
        "A run of three acts and a final citadel on branching maps of battles, elites, shops, events, forges and camps; lives carry over and leaks cost them",
        "Draft a war table of up to six towers with 91 boons and 52 relics; every reward leans toward your core and keeps one wild card",
        "Renown after every run opens towers, relics, events and perks; five commanders and ten ascensions each",
        "A lit low-poly diorama for each act, hitstop and shatter chimes, and synthesised music that swells with the wave",
        "A codex of every tower, enemy, boss, boon, relic and event you've met; close pal mid-run and the run waits where you left it",
        "A board for the highest ascension won; signed in, your renown, unlocks, codex and the run in progress follow you to your other machines and play.cagdas.io"
      ],
      "screenshots": [
        {
          "file": "1-meadow.png",
          "caption": "Act I in the meadow, wave 5 of 7: towers on the bends, specialised at level four, and the next wave's roles in the band above"
        },
        {
          "file": "2-tyrant.png",
          "caption": "The Ember Tyrant at the citadel, its health in three bars: alchemy, fire and storm towers, a ballista and a war banner"
        },
        {
          "file": "3-map.png",
          "caption": "A run's map: battles, events, shops, forges and camps on branching paths, and the act's boss waiting at the end"
        },
        {
          "file": "4-snow.png",
          "caption": "Act III's last wave in the snow: bats take the short way over the corners, where only some towers reach"
        },
        {
          "file": "5-commander.png",
          "caption": "Five commanders, each with its own towers, spells, relic and gift, and ten ascensions to climb"
        },
        {
          "file": "6-title.png",
          "caption": "The title: your renown level, what it opens next, and the codex of everything you've met"
        }
      ]
    },
    "palettes": {
      "ramparts": {
        "title": "Ramparts",
        "kind": "view",
        "description": "A tower defense roguelike run. Escape or closing the panel pauses a battle, and the run waits for you.",
        "keys": [
          {
            "keys": "space",
            "title": "Next wave"
          },
          {
            "keys": "1",
            "title": "Build on the pad (1-6)"
          },
          {
            "keys": "q",
            "title": "Commander spells (Q and W)"
          },
          {
            "keys": "f",
            "title": "Battle speed"
          },
          {
            "keys": "p",
            "title": "Pause or carry on"
          },
          {
            "keys": "backspace",
            "title": "Back"
          },
          {
            "keys": "m",
            "title": "Sound on or off"
          }
        ]
      }
    }
  },
  "playable": true,
  "updated_at": "2026-10-06T01:16:34Z",
  "url": "https://pal.cagdas.io/extensions/ramparts",
  "tagline": "Hold the road, then the next act, then the citadel",
  "category": "fun",
  "screenshots": [
    "https://pal.cagdas.io/extensions/ramparts/screenshots/1-meadow-dark.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/1-meadow.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/2-tyrant-dark.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/2-tyrant.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/3-map-dark.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/3-map.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/4-snow-dark.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/4-snow.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/5-commander-dark.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/5-commander.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/6-title-dark.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/6-title.png"
  ],
  "panel_screenshots": [
    "https://pal.cagdas.io/extensions/ramparts/screenshots/1-meadow.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/2-tyrant.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/3-map.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/4-snow.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/5-commander.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/6-title.png"
  ],
  "bar_screenshots": [],
  "panel_screenshots_dark": [
    "https://pal.cagdas.io/extensions/ramparts/screenshots/1-meadow-dark.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/2-tyrant-dark.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/3-map-dark.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/4-snow-dark.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/5-commander-dark.png",
    "https://pal.cagdas.io/extensions/ramparts/screenshots/6-title-dark.png"
  ],
  "bar_screenshots_dark": [],
  "has_bar": false,
  "bar_items": [],
  "has_links": false,
  "links": [],
  "multi": false,
  "has_readme": true
}
