Files
siege-protocol/README.md
T
2026-06-16 11:39:24 -04:00

137 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SIEGE PROTOCOL
An inverted tower-defense game. You control the enemies — your tower kills them automatically. Every kill pays out more than it costs. Spend the profit on weapons, upgrades, and armor. Keep the tower alive as long as possible.
**Play online:** [siege-protocol on Gitea](https://git.44r0n.cc/44r0n7/siege-protocol)
---
## How to Play
Open `index.html` in a browser, or serve locally:
```bash
python3 -m http.server 8080
# → http://localhost:8080
```
No build step. No dependencies.
### Controls
| Input | Action |
|-------|--------|
| `1` `0` | Deploy enemy type 110 |
| Mouse scroll | Adjust send quantity |
| `Space` | Open/close shop |
| `I` | Open/close inventory |
| `Esc` / `P` | Pause / unpause |
### The Loop
1. Deploy enemies using credits — each deployment costs credits
2. Your tower auto-tracks and kills them
3. Each kill pays a reward (always higher than the deploy cost)
4. Spend profit in the shop: more weapons, more weapon slots, tower armor/HP, shields
5. Survive until the tower dies or you go **bankrupt** (no credits, no enemies, can't afford anything)
**Reserve:** A minimum credit floor you set yourself. Keeps you from accidentally spending down to zero with no way back.
---
## Enemies
| # | Name | Cost | Reward | Notes |
|---|------|------|--------|-------|
| 1 | GRUNT | 20 | 30 | Baseline. Weak to poison. |
| 2 | RUNNER | 30 | 44 | Very fast, low HP. Weak to lightning and poison. |
| 3 | BRUTE | 80 | 112 | High HP, 3 armor. Weak to void/fire/poison. Physical resistant. |
| 4 | SWARM | 60 | 84 | Spawns 6 tiny units at once. Weak to fire/lightning. |
| 5 | PHANTOM | 100 | 138 | 30% dodge. Void-touched. Weak to fire. |
| 6 | ICELING | 90 | 125 | Ice elemental. Immune to ice, weak to fire/lightning. |
| 7 | SPARKLING | 110 | 148 | Lightning elemental. Immune to lightning, weak to ice/void. |
| 8 | VENOM | 120 | 160 | Poison immune. Weak to ice/arcane. |
| 9 | WRAITH | 200 | 265 | Ignores 80% of armor. Weak to arcane (2×). |
| 10 | TITAN | 350 | 465 | 120 HP, 8 armor. Void weakness (2×). Extremely slow. |
---
## Weapons
| Weapon | Cost | Type | Notes |
|--------|------|------|-------|
| CANNON | free | Projectile | Starting weapon. Upgradeable piercing and crit. |
| FLAMETHROWER | 800 | Cone | Continuous fire cone. Applies burn DoT. |
| CHAIN LIGHTNING | 1,200 | Chain | Arcs between up to 3 enemies. |
| MORTAR | 1,500 | AoE | Lobbed shell, group-targeted. Slow reload. |
| POISON CLOUD | 1,600 | AoE | Lingering gas cloud with DoT. |
| FREEZE BOMB | 1,800 | AoE | Freezes enemies solid. |
| VOID CANNON | 2,000 | Projectile | Massive slow shot. Shreds armor. |
| LASER | 2,000 | Beam | Pierces all enemies in a line. |
| ARCANE TURRET | 2,200 | Projectile | Rapid bolts. Applies Amplify debuff (+25% damage taken). |
| MISSILE POD | 2,400 | Homing AoE | Fires at 3 targets simultaneously. |
Up to 8 weapon slots can be unlocked via the shop. Each weapon has its own upgrade tree (damage, fire rate, special stats, element infusion).
---
## Elements
Seven elements with per-enemy resistances and weaknesses:
| Element | Color |
|---------|-------|
| 🔥 Fire | Damage over time, strong vs ice/void enemies |
| ❄️ Ice | Freeze, strong vs lightning/poison |
| ⚡ Lightning | Arc damage, strong vs fast/swarm enemies |
| ☠️ Poison | DoT, weak to most elemental enemies |
| 🌀 Void | Armor bypass, strong vs armored/phantom |
| ✨ Arcane | Amplify debuff, strong vs void and poison |
| 💢 Physical | Default element |
Weapons start with a default element. Purchase **Infuse slots** in a weapon's upgrade tree to add up to 3 additional elements.
---
## Tower Upgrades
- **Hull** — max HP (5 tiers, up to +130 HP total)
- **Plating** — armor (5 tiers, up to +16 armor total)
- **Servo Motors** — aim speed (6 tiers, near-instant at max)
- **Scanner** — targeting range (4 tiers)
- **Weapon Slots** — unlock slots 28
- **Field Repair** — one-time HP restore (repeatable)
- **Shields** — choose Dome Shield (all-direction) or Directional Shield (rotates to track threats), each with their own upgrade tree
---
## Tech
- HTML5 Canvas, CSS, vanilla JS — no frameworks, no bundler
- 1600×900 logical resolution, CSS-scaled to fit any viewport
- High score persisted in `localStorage` (`siegeprotocol_best`)
- JS modules share globals; script load order in `index.html` is intentional
```
siege-protocol/
├── index.html # entry point
├── css/
│ ├── main.css # game UI
│ └── dev-console.css
└── js/
├── defs.js # enemy/weapon/upgrade definitions
├── state.js # game state and entity factories
├── main.js # game loop, init, high score
├── enemies.js # enemy AI and combat
├── weapons.js # weapon firing logic
├── shop.js # shop and upgrade system
├── renderer*.js # canvas rendering (split by concern)
└── ...
```
---
## License
MIT